类 Meta 中的字段无效



models.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})'

forms.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 !!

问:错误是什么?我不需要产品模型中的所有字段(如活动布尔字段(,我只需要"姓名"、"电子邮件"、"正文"、"产品"字段。

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

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

序列化程序名称OpinionModelForm,列出的字段属于Opinion,因此我猜您实际上想序列化Opinion并且没有Product,如您在以下行中定义的那样:

model = Product

只需将其更改为:

model = Opinion

最新更新