serialization - 尝试在序列化程序“UserSerializer”上获取字段“email”的值时出现 AttributeError
问题描述
创建 Django REST 框架 API。使用抽象用户和电子邮件是默认使用的日志记录参数。
/post/ 处的 AttributeError
email
尝试获取序列化程序上的字段值时出现 AttributeError UserSerializer
。序列化器字段可能命名不正确,并且与Post
实例上的任何属性或键都不匹配。原始异常文本是:“发布”对象没有属性“电子邮件”。
class PostSerializer(ModelSerializer):
category = ReadOnlyField(source='category.name')
author = UserSerializer(source='user.email')
#question = serializers.CharField(source='question.text', read_only=True)
class Meta:
model = Post
fields = '__all__'
class User(AbstractUser):
username = models.CharField("Username", max_length=50, unique=True)
email = models.EmailField("Email Address", max_length=254, unique=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username', 'first_name', 'last_name']
class Post(models.Model):
STATUS_CHOICES = (
('draft', 'Draft'),
('published', 'Published'),
)
title = models.CharField(max_length=250)
slug = models.SlugField(max_length=250, unique_for_date='publish')
author = models.ForeignKey(User, related_name='posts', on_delete=models.CASCADE, to_field='email')
category = models.ForeignKey(Category, related_name='categorys', on_delete=models.CASCADE)
body = models.TextField()
image = models.ImageField(upload_to='blog/%Y/%m/%d', blank=True)
publish = models.DateTimeField(default=timezone.now)
rating = models.IntegerField("Rumor Rate", validators=[MaxValueValidator(5), MinValueValidator(0)], default=1, null=True)
created = models.DateTime[![enter image description here][1]][1]Field(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='draft')
解决方案
我想您想在请求Post
端点时在作者字段中返回作者的电子邮件。您还可以将author
序列化程序中的字段转换为ReadOnlyField
(as category
) 并指定source='author.email'
,因为您的模型外键命名如下:
class PostSerializer(ModelSerializer):
category = ReadOnlyField(source='category.name')
author = ReadOnlyField(source='author.email')
# ...
推荐阅读
- asp.net-core - 如何在 razor 页面中获取相关数据。EF 核心 5.0
- r - 按单独的列排序 ggplot
- qt - 将地图从 OSM 移植到 QML QT 中的 3D 地图
- javascript - JavaScript:超类中的“this”指的是子类
- node.js - npx create-react-app 不工作,而是抛出错误
- elasticsearch - Kibana:stracktrace 的搜索模式未检索到结果
- reactjs - 读取芯片中的文本
- python - Python - __init__ 参数
- angular - 如何禁用 tslint 文件中的规则“TS2322:类型 'WebSocketAction' 不可分配给类型 'boolean'。”
- flutter - 为什么我的 Intellij Idea Flutter 重命名文件或文件夹重构不起作用?