python - 如何从序列化程序内部访问我想验证的实例属性?
问题描述
在我看来,我会做以下事情:
class ReviewViewSet(viewsets.ModelViewSet):
#queryset, serializer_class and permission_classes defined here
def perform_create(self, serializer):
title_id = self.kwargs.get('title_id')
title = get_object_or_404(Title, pk=title_id)
serializer.save(author=self.request.user, title=title)
我想验证该评论尚不存在。我正在尝试在序列化程序中执行此操作validate()
:
class ReviewSerializer(serializers.ModelSerializer):
title = serializers.SlugRelatedField(slug_field='pk', read_only='True')
author = serializers.SlugRelatedField(slug_field='username', read_only='True')
def validate(self, data):
title = # <-- How to get title here?
author = self.context['request'].user
queryset = Review.objects.all().filter(title=title, author=author)
if queryset.exists():
raise serializers.ValidationError('Review alredy exists')
return(data)
class Meta:
fields = '__all__'
model = Review
尝试title = self.title
加薪AttributeError: 'ReviewSerializer' object has no attribute 'title'
title
在我的情况下如何从内部访问validate()
?
这是我的Review
模型:
class Review(models.Model):
class Meta:
ordering = ['-pub_date']
unique_together = ['title', 'author']
title = models.ForeignKey(
Title,
on_delete=models.CASCADE,
related_name='reviews',
)
author = models.ForeignKey(
CustomUser,
on_delete=models.CASCADE,
related_name='reviews',
)
text = models.TextField('Review text')
score = models.PositiveSmallIntegerField(
'Review score',
validators=[
MinValueValidator(1),
MaxValueValidator(10)
]
)
pub_date = models.DateTimeField(
'Date and time of review',
auto_now_add=True,
db_index=True
)
解决方案
您的问题的答案在于文档:https ://www.django-rest-framework.org/api-guide/serializers/#object-level-validation
关于validate
方法:
此方法采用单个参数,即字段值字典
如果您查看文档中的代码示例,您会发现您可能需要验证的所有数据都在方法的data
参数中validate
。
因此,标题在data['title']
.
推荐阅读
- python-3.x - pandas 选择无法转换为 int 或 float 的行
- java - 如何使用#Hibernate #Spring #Java在MySql中存储“日期”?
- python - 如何在 Python 中创建图像中的凸起?最好使用枕形失真
- android - 在 Leanback 示例中播放视频时出现问题
- c# - 将按钮添加到 Datagrid Cell WPF
- node.js - 为什么我们在添加唯一索引时必须使用 schema.path?
- java - 如何在 Java 中使用 Cassandra Map 类型
- react-native - 为什么动画 toValue 反应原生无法正常工作?
- r - 如何列出包含给定模式的字符串?
- image - 为什么我无法使用 React Native 解析图像