2011-09-23 41 views
0

我有三個類的模型:PendingAuthorisationDirectorMemberDirectorMember如果實例具有相應的PendingAuthorisation,則將其視爲非活動。Django外鍵 - 一個類與多個其他類具有相同的關係

我的問題是如何模擬這個。我理想地喜歡PendingAuthorisation只有一個字段,defers,它可以指DirectorMember。如果我在DirectorMember中都創建了一個外鍵,那麼我需要有兩個不同名稱的關係,並且當使用PendingAuthorisation時,我需要檢查兩者以找到它所推遲的對象。在任何情況下,PendingAuthorisation都不應推遲每種類型的一個對象。

關於如何建模的建議?

回答

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 
+0

謝謝,使有很大的意義。我將前往閱讀這些新功能。 – Marcin

相關問題