使用 Materialise 的外键 Django 表单
Django Forms with Foreign Key using Materialize
我想要的
创建在模板上的 Django 管理中显示的相同表单。
问题
我无法将外键加载到表单中。我一直在寻找解决方案两天。我已经阅读了 Django documentation 的 ModelForm
和 QuerySet
但我找不到解决方案。如果这里有人可以帮助我,那就太棒了。感谢您的宝贵时间!
我的代码
models.py
:
from django.conf import settings
from django.db import models
from django.utils import timezone
from taggit.managers import TaggableManager
from ckeditor.fields import RichTextField
class Categoria(models.Model):
categoria = models.CharField(
max_length=200, verbose_name="Nome da categoria",
help_text="colocar aqui o texto de ajuda"
)
resumo = models.CharField(
max_length=200, verbose_name="Resumo",
help_text="colocar aqui o texto de ajuda"
)
slug = models.CharField(max_length=200, default=1)
class Meta:
# Gives the proper plural name for admin
verbose_name_plural = "Categorias"
verbose_name = "categoria"
def __str__(self):
return self.categoria
class Serie(models.Model):
serie = models.CharField(
max_length=200,
verbose_name="Série",
help_text="colocar aqui o texto de ajuda"
)
categoria = models.ForeignKey(
Categoria,
default=1,
on_delete=models.SET_DEFAULT
)
resumo = models.CharField(max_length=200)
class Meta:
verbose_name_plural = "serie"
def __str__(self):
return self.serie
class Artigo(models.Model):
title = models.CharField(
max_length=200,
verbose_name='Título do Post',
help_text='Procure usar um texto que seja a pergunta de um usuário: Ex. Como escolher o revestimento '
)
heading = models.CharField(
max_length=250,
verbose_name='Chamada',
help_text='Um texto pequeno para atrair o leitor'
)
serie = models.ForeignKey(
Serie,
default='1',
on_delete=models.SET_DEFAULT
)
text = RichTextField(blank=True, null=True)
created_date = models.DateTimeField(
default=timezone.now,
verbose_name='Data de criação:'
)
published_date = models.DateTimeField(
blank=True,
null=True,
verbose_name='Data de postagem:'
)
slug = models.SlugField(
unique=True,
max_length=100,
verbose_name='Url única:',
help_text='A URL deve ser única, representar o conteúdo, e ser chamativa para SEO'
)
tags = TaggableManager(verbose_name='tags')
def publish(self):
self.published_date = timezone.now()
self.save()
def __str__(self):
return self.title
forms.py
:
from django import forms
from .models import Artigo, Serie
class PostForm(forms.ModelForm):
class Meta:
model = Artigo
fields = '__all__'
widgets = {
'title': forms.TextInput(attrs={'class': 'input', 'placeholder': 'Digite um texto'}),
'heading': forms.TextInput(attrs={'class': 'input', 'placeholder': 'Digite um texto'}),
'serie': forms.ModelChoiceField(queryset=Série.objects.all()),
'text': forms.Textarea(attrs={'class': 'input',}),
'created_date': forms.DateTimeInput(attrs={'class': 'datepicker', 'type':'datetime','placeholder': 'Digite um texto'}),
'published_date': forms.DateTimeInput(attrs={'class': 'datepicker', 'placeholder': 'Digite um texto'}),
'slug': forms.TextInput(attrs={'class': 'input', 'placeholder': 'Digite um texto'}),
'tags': forms.TextInput(attrs={'class': 'chips chips-placeholder',}),
}`
我读过的 Whosebug 中的一些帖子:
- Django 表单和查询集
- Django ModelForm with foreign key
- MultiValueField does not work with ModelChoiceField
- Multi select input in admin site
此致,
A.
终于找到解决方法了
同时使用 Django 和 Materialize 时要小心。
Material CSS 设置为与某些 类 一起使用,其中一些 需要 JavaScript 才能正常工作.
Django 中的表单以不同的 类 呈现,您需要使用 ID 而不是 类 来初始化 jQuery。
检查发生了什么:
- 删除所有 CSS 和样式引用(使用原始 HTML)
- 如果
form
被渲染,你的问题不在外键上
代码示例:
在呈现 forms.py
的模板上使用此代码,我找到了解决方案
<script>
// datepicker for
$(document).ready(function () {
$('#id_published_date, #id_created_date').datepicker();
});
// Select
$(document).ready(function () {
$('select').formSelect();
});
</script>
我想要的
创建在模板上的 Django 管理中显示的相同表单。
问题
我无法将外键加载到表单中。我一直在寻找解决方案两天。我已经阅读了 Django documentation 的 ModelForm
和 QuerySet
但我找不到解决方案。如果这里有人可以帮助我,那就太棒了。感谢您的宝贵时间!
我的代码
models.py
:
from django.conf import settings
from django.db import models
from django.utils import timezone
from taggit.managers import TaggableManager
from ckeditor.fields import RichTextField
class Categoria(models.Model):
categoria = models.CharField(
max_length=200, verbose_name="Nome da categoria",
help_text="colocar aqui o texto de ajuda"
)
resumo = models.CharField(
max_length=200, verbose_name="Resumo",
help_text="colocar aqui o texto de ajuda"
)
slug = models.CharField(max_length=200, default=1)
class Meta:
# Gives the proper plural name for admin
verbose_name_plural = "Categorias"
verbose_name = "categoria"
def __str__(self):
return self.categoria
class Serie(models.Model):
serie = models.CharField(
max_length=200,
verbose_name="Série",
help_text="colocar aqui o texto de ajuda"
)
categoria = models.ForeignKey(
Categoria,
default=1,
on_delete=models.SET_DEFAULT
)
resumo = models.CharField(max_length=200)
class Meta:
verbose_name_plural = "serie"
def __str__(self):
return self.serie
class Artigo(models.Model):
title = models.CharField(
max_length=200,
verbose_name='Título do Post',
help_text='Procure usar um texto que seja a pergunta de um usuário: Ex. Como escolher o revestimento '
)
heading = models.CharField(
max_length=250,
verbose_name='Chamada',
help_text='Um texto pequeno para atrair o leitor'
)
serie = models.ForeignKey(
Serie,
default='1',
on_delete=models.SET_DEFAULT
)
text = RichTextField(blank=True, null=True)
created_date = models.DateTimeField(
default=timezone.now,
verbose_name='Data de criação:'
)
published_date = models.DateTimeField(
blank=True,
null=True,
verbose_name='Data de postagem:'
)
slug = models.SlugField(
unique=True,
max_length=100,
verbose_name='Url única:',
help_text='A URL deve ser única, representar o conteúdo, e ser chamativa para SEO'
)
tags = TaggableManager(verbose_name='tags')
def publish(self):
self.published_date = timezone.now()
self.save()
def __str__(self):
return self.title
forms.py
:
from django import forms
from .models import Artigo, Serie
class PostForm(forms.ModelForm):
class Meta:
model = Artigo
fields = '__all__'
widgets = {
'title': forms.TextInput(attrs={'class': 'input', 'placeholder': 'Digite um texto'}),
'heading': forms.TextInput(attrs={'class': 'input', 'placeholder': 'Digite um texto'}),
'serie': forms.ModelChoiceField(queryset=Série.objects.all()),
'text': forms.Textarea(attrs={'class': 'input',}),
'created_date': forms.DateTimeInput(attrs={'class': 'datepicker', 'type':'datetime','placeholder': 'Digite um texto'}),
'published_date': forms.DateTimeInput(attrs={'class': 'datepicker', 'placeholder': 'Digite um texto'}),
'slug': forms.TextInput(attrs={'class': 'input', 'placeholder': 'Digite um texto'}),
'tags': forms.TextInput(attrs={'class': 'chips chips-placeholder',}),
}`
我读过的 Whosebug 中的一些帖子:
- Django 表单和查询集
- Django ModelForm with foreign key
- MultiValueField does not work with ModelChoiceField
- Multi select input in admin site
此致,
A.
终于找到解决方法了
同时使用 Django 和 Materialize 时要小心。
Material CSS 设置为与某些 类 一起使用,其中一些 需要 JavaScript 才能正常工作.
Django 中的表单以不同的 类 呈现,您需要使用 ID 而不是 类 来初始化 jQuery。
检查发生了什么:
- 删除所有 CSS 和样式引用(使用原始 HTML)
- 如果
form
被渲染,你的问题不在外键上
代码示例:
在呈现 forms.py
的模板上使用此代码,我找到了解决方案
<script>
// datepicker for
$(document).ready(function () {
$('#id_published_date, #id_created_date').datepicker();
});
// Select
$(document).ready(function () {
$('select').formSelect();
});
</script>