首页 > 解决方案 > Meta 类中的字段无效

问题描述

模型.py

class Product(models.Model):
    title = models.CharField(max_length=200)
    description = models.TextField()
    price = models.DecimalField(decimal_places=5,max_digits= 1500)
    summary = models.TextField()
    featured = models.BooleanField()
    def __str__(self):
        return self.title
        # return f'product title:{self.title}-product price:{self.price}'workok
    class Meta:
         ordering = ('-price',)


class Opinion(models.Model):
        name = models.CharField(max_length=20)
        email = models.EmailField(max_length=20)
        body = models.TextField()
        opinion_date = models.DateTimeField(auto_now_add=True)
        active = models.BooleanField(default=False)
        product = models.ForeignKey(Product, on_delete=models.CASCADE, related_name='opinion_set')

        def __str__(self):
            return f'({self.name}) add opinion about ({self.product})'

表格.py:

from django.forms import ModelForm
from .models import Product  #space after from keyword

class OpinionModelForm(ModelForm):
    class Meta:
        model = Product
        fields = ['name','email','body','product']



invalid in code line :
 fields = ['name','email','body','product']      #---- NOT WORK !!!

,但是如果我将上面的代码更改为:

fields = "__all__"           # ----it is WORKing ok without any problem !!

问题:错误是什么?我不需要 Product 模型中的所有字段(如活动布尔字段),我只需要 'name','email','body','product' fields 。

标签: djangodjango-forms

解决方案


根据错误和您提供的代码,主要问题是您在序列化程序中选择模型时出错:

class OpinionModelForm(ModelForm):
    class Meta:
        model = Product
        fields = ['name','email','body','product']

序列化程序名称是OpinionModelForm并且列出的字段属于,Opinion所以我猜你实际上想要序列化Opinion,而不是Product你在这一行定义的:

model = Product

只需将其更改为:

model = Opinion

推荐阅读