![](/img/trans.png)
[英]How to access object atribute inside a list of objects that is an atribute of a class in python?
[英]How to access atribute of instance I want to validate from inside serializer?
在我看来,我执行以下操作:
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'
在我的情况下,如何从validate()
内部访问title
?
这是我的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
方法:
此方法采用单个参数,即字段值的字典
如果您查看文档中的代码示例,您将看到您可能需要验证的所有数据都在validate
方法的data
参数中。
因此,标题在data['title']
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.