我在Django中有以下模型:
from django.db import models
class Team(models.Model):
name = models.CharField(max_length=200)
class Match(models.Model):
team_home = models.ForeignKey(Team)
team_visitors = models.ForeignKey(Team)
league = models.CharField(max_length=200)
date_played = models.DateField()
这个想法是为了能够有一个“匹配”对象,该对象有两个参加过某场比赛的团队。一支球队表现自己很奇怪。如何保证team_home
不等于team_visitors
?
这不能通过纯Django完成。有添加CHECK
约束的票证:https : //code.djangoproject.com/ticket/11964
为了确保team_home == team_visitors
永远不会发生这种情况,您将需要向与数据库相关的表中添加自定义约束。例如,在MySQL和PostgresQL中:
alter table myapp_match add constraint match_teams_not_equal check (team_home_id <> team_visitors_id);
保存发生时,这将导致数据库引发完整性错误。请注意,在某些数据库中,您无法实现这种约束。
您可以team_home != team_visitors
通过重写save
方法来部分确保:
class Match(models.Model):
....
def save(self, *args, **kwargs):
if self.team_home == self.team_visitors:
raise Exception('attempted to create a match object where team_home == team_visitors')
super(Match, self).save(*args, **kwargs)
但是,有人可以直接修改数据库,也可以update
在Django中使用queryset,但最终仍然可以使用Match
where对象team_home == team_visitor
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句