我有一个包含三个类的模型:PendingAuthorisation
,Director
和Member
。如果Director
和Member
个实例具有相应的PendingAuthorisation
,则会被视为无效。
我的问题是如何对此进行建模。理想情况下,我希望PendingAuthorisation
只有一个字段defers
,可以引用Director
或Member
。如果我在Director
和Member
中创建了一个外键,那么我需要有两个不同名称的关系,当使用PendingAuthorisation
时,我需要检查两者以找到它的对象正在推迟。在任何情况下,PendingAuthorisation
都不应该推迟每种类型的一个对象。
有关如何建模的任何建议吗?
答案 0 :(得分:2)
我建议使用两个外键(在save方法中进行完整性检查以确保它们不是都已设置),然后返回一个属性以返回已设置的对象。
想想类似的事情:
from django.db import models
class PendingAuthorization(models.Model):
director = models.ForeignKey(Director, null=True, blank=True)
member = models.ForeignKey(Member, null=True, blank=True)
def save(self, *args, **kwargs):
if self.director and self.member:
raise ValueError, 'Both a director and member are set; this is not allowed.'
return super(PendingAuthorization, self).save(*args, **kwargs)
@property
def defers(self):
if self.director:
return self.director
if self.member:
return self.member
return None