gpt4 book ai didi

django-rest-framework - Django Rest Framework - 在保存到数据库之前检查/操作数据(通过某种逻辑)

转载 作者:行者123 更新时间:2023-12-04 08:24:32 25 4
gpt4 key购买 nike

我是 Django Rest Framework 的新手。我有一个这样的序列化程序:

class ReviewSerializer(serializers.ModelSerializer):
class Meta:
model = Review
fields = (
'user',
'course',
'major',
'title',
'text',
'placements',
'faculty',
'infrastructure',
'students',
'extra_curricular',
'passing_year',
)

模型.py
class Review(models.Model):
user = models.ForeignKey(to=User, related_name='reviews')
course = models.ForeignKey(to=Course, related_name='reviews')
major = models.ForeignKey(to=Major, related_name='reviews', blank=True, null=True)
title = models.TextField(db_index=True)
text = models.TextField(db_index=True)
placements = models.FloatField(default=0.0)
faculty = models.FloatField(default=0.0)
infrastructure = models.FloatField(default=0.0)
students = models.FloatField(default=0.0)
extra_curricular = models.FloatField(default=0.0)
passing_year = models.PositiveSmallIntegerField(default=2014)
created_on = models.DateTimeField(auto_now_add=True)
updated_on = models.DateTimeField(auto_now=True)

View .py
class ReviewViewSet(viewsets.ModelViewSet):
"""
College API
"""
queryset = Review.objects.all()
serializer_class = ReviewSerializer
paginate_by = 5

现在,每当我向 API 发布内容时,如果验证成功通过,它就会直接保存到数据库中。我需要的是,在将数据保存到数据库之前,我想使用一些业务逻辑检查并应用一些数据条件。因此,如果条件为真,则数据才会被保存,否则它会向客户端返回错误消息。

最佳答案

我假设您使用的是新版本 3.0。然后你需要把你的验证逻辑放到你的序列化程序中 ReviewSerializer (见 http://www.django-rest-framework.org/topics/3.0-announcement/#serializers)。

因此,如果您想创建字段验证,您应该重载 def validate_<fieldname>(self, value) .例如,如果您想要 Review.placements>= 0.0 ,你可以写

class ReviewSerializer(serializers.ModelSerializer):
[...]
def validate_placements(self, value):
if value >= 0.0:
return value
raise serializers.ValidationError('placements should be non-negative.')
[...]

如果您需要更高级的验证,例如要验证两个依赖字段,则需要覆盖 def validate(self, attrs) .

例如有 created_on <= updated_on
class ReviewSerializer(serializers.ModelSerializer):
[...]
def validate(self, attrs):
if attrs['created_on'] <= attrs['update_on']:
return attrs
raise ValidationError('Date of creation should be before update date.')
[...]

如果您现在通过 REST-API 添加一些对象,将自动调用验证。您不必覆盖 ModelViewSet 的方法.

link上方和中 www.django-rest-framework.org/api-guide/serializers/#validation更多提示。

关于django-rest-framework - Django Rest Framework - 在保存到数据库之前检查/操作数据(通过某种逻辑),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27313482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com