在Django Rest框架模型中实现独特的元组条件

时间:2017-11-20 16:32:50

标签: django rest django-rest-framework tuples

所以我有一个名为class Rating(models.Model): id = models.AutoField(primary_key=True) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) event = models.ForeignKey(Event, on_delete=models.CASCADE) person = models.ForeignKey(Person, on_delete=models.CASCADE) rating_for = models.TextField(choices=RATING_FOR) rating = models.IntegerField(choices=RATING_NUMS) class Meta: unique_together = (("person", "event", "rating_for"),) 的Django Rest Framework模型,我正在使用它:

unique_together

我希望强制执行验证条件,检查一个人对一个事件的评级不能超过一个。基本上,重复检查。

我尝试做的事情正如您所见,强制执行unique_together,因为我认为hacker的工作方式是它形成了这些值的元组,并且不允许重复元组。

我的意思是,如果event id为1,rating_for id为2而12food_event为'food event',则(比喻)形成一个元组{{ 1}}并禁止使用此特定12food_event组合。这将允许12networking_event

显然,这不是unique_together的工作方式。如果我有一个组合12food_event,我将来不能将food_event用于其他任何内容,12也是如此。

是否有任何方法可以在模型级别强制执行元组唯一性,还是必须在序列化程序/视图中运行单独的验证检查?

1 个答案:

答案 0 :(得分:0)

最好在serializers.py文件中使用 UniqueTogetherValidator validate()方法。有关详细信息,请参阅链接http://www.django-rest-framework.org/api-guide/validators/