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