Django外键 - 一个类与多个其他类具有相同的关系

时间:2011-09-23 16:13:38

标签: django django-models modeling

我有一个包含三个类的模型:PendingAuthorisationDirectorMember。如果DirectorMember个实例具有相应的PendingAuthorisation,则会被视为无效。

我的问题是如何对此进行建模。理想情况下,我希望PendingAuthorisation只有一个字段defers,可以引用DirectorMember。如果我在DirectorMember中创建了一个外键,那么我需要有两个不同名称的关系,当使用PendingAuthorisation时,我需要检查两者以找到它的对象正在推迟。在任何情况下,PendingAuthorisation都不应该推迟每种类型的一个对象。

有关如何建模的任何建议吗?

1 个答案:

答案 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