django - 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 。
解决方案
根据错误和您提供的代码,主要问题是您在序列化程序中选择模型时出错:
class OpinionModelForm(ModelForm):
class Meta:
model = Product
fields = ['name','email','body','product']
序列化程序名称是OpinionModelForm
并且列出的字段属于,Opinion
所以我猜你实际上想要序列化Opinion
,而不是Product
你在这一行定义的:
model = Product
只需将其更改为:
model = Opinion
推荐阅读
- google-tag-manager - 将复杂数据层中的值放入 GTM 变量中
- javascript - Nativescript ios - 命令 xcodebuild 失败,退出代码为空
- javascript - 如何对多行字符串进行排序?
- laravel - Laravel Eloquent:使用 OrWhere 的多个 Wheres
- sql - 按日期透视 DateTime 字段
- ios - 在 Tableview Swift 中删除 Header View Section 的白色边框底部
- html - angular 5 动态反应形式
- c# - C# 使用自定义环境变量以管理员身份启动子进程(在 CMD 窗口中)
- three.js - 是否可以在three.js中渲染阴影而不必从对象投射
- sql - 我怎样才能使它成为一个插入语句