所以我有一个名为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
用于其他任何内容,1
和2
也是如此。
是否有任何方法可以在模型级别强制执行元组唯一性,还是必须在序列化程序/视图中运行单独的验证检查?
答案 0 :(得分:0)
最好在serializers.py文件中使用 UniqueTogetherValidator 或 validate()方法。有关详细信息,请参阅链接http://www.django-rest-framework.org/api-guide/validators/