问题描述
我想要什么
问题
我无法将外键加载到表单中。我正在寻找解决方案两天。我已经阅读了ModelForm
和QuerySet
的{{3}},但是找不到解决方案。如果这里有人可以帮助我,那将很棒。感谢您的宝贵时间!
我的代码
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','serie': forms.ModelChoiceField(queryset=Série.objects.all()),'text': forms.Textarea(attrs={'class': 'input',}),'created_date': forms.DateTimeInput(attrs={'class': 'datepicker','type':'datetime','published_date': forms.DateTimeInput(attrs={'class': 'datepicker','slug': forms.TextInput(attrs={'class': 'input','tags': forms.TextInput(attrs={'class': 'chips chips-placeholder',}`
我已阅读StackOverflow中的一些帖子:
- Django documentation
- Django forms and querysets
- Django ModelForm with foreign key
- Django Queryset foreign keys
- MultiValueField does not work with ModelChoiceField
最诚挚的问候,
A。
解决方法
最后,我找到了解决方法。
同时使用Django和Materialize时必须小心。
材料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>