使用Materialize的带有外键的Django表单 我想要什么问题我的代码我已阅读StackOverflow中的一些帖子:要检查会发生什么情况:代码示例:

问题描述

我想要什么

创建与Django管理员在模板上显示的表单相同的表单。

问题

我无法将外键加载到表单中。我正在寻找解决方案两天。我已经阅读了ModelFormQuerySet的{​​{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中的一些帖子:

最诚挚的问候,

A。

解决方法

最后,我找到了解决方法。

同时使用Django和Materialize时必须小心。

材料CSS设置为可以与某些一起使用,其中有些需要JavaScript才能正常工作

Django中的表单在不同的类中呈现,并且您需要使用ID而不是类来初始化jQuery。

要检查会发生什么情况:

  1. 删除所有CSS和样式引用(使用原始HTML)
  2. 如果呈现了form,则您的问题不在外键上

代码示例:

在呈现forms.py的模板上使用此代码,我找到了解决方法

<script>
  // datepicker for 
  $(document).ready(function () {
    $('#id_published_date,#id_created_date').datepicker();
  });
  // Select 
  $(document).ready(function () {
    $('select').formSelect();
  });
</script>