2012-11-15 50 views
0

所以基本上我的應用程序有當然用戶,每個用戶可以創建5個「ModelA」實例。很簡單,但也有「ModelB」與「ModelA」和用戶模型的關係。我希望用戶能夠創建總共15個「ModelB」實例,但每個「ModelA」實例只能綁定5個「ModelB」實例?我有一個複雜的模型問題...更多的信息

任何提示?

予處理的第一部分供每個用戶5 「MODELA」 實例的方式是這樣的:

def clean(self): 
     new_instance = self.__class__ 
     if (new_instance.objects.count() > 4): 
      raise ValidationError(
       "Users may only create 5 %s." % new_instance.verbose_name_plural 
      ) 
     super(ModelA, self).clean() 

由於

編輯:(內置在假定的Django用戶的功能)

class ModelB(models.Model): 
    user = models.ForeignKey(User) 
    modelA = models.ForeignKey('ModelA') 
    other_field = models.CharField(max_length=50) 

class ModelA(models.Model): 
    user = models.ForeignKey(User) 
    other_field = models.CharField(max_length=50) 

基本上用戶可以創建5個'ModelA'實例,並且對於每個實例他們可以創建3個'ModelB'實例。

我該如何在模型邏輯中做到這一點?

謝謝

+0

如果您可以共享模型的定義將是有幫助的。 –

+0

好吧,我會編輯我的答案。 – edhedges

回答

1

這是行得通嗎?

class ModelB(models.Model): 
    user = models.ForeignKey(User) 
    modelA = models.ForeignKey('ModelA', related_name = 'modelbs') 
    other_field = models.CharField(max_length=50) 

    def clean(self): 
    if (self.modelA.modelbs.all().count() > 2): 
     raise ValidationError(
      "ModelA may create may only create 3 modelBs " 
     ) 
    super(ModelB, self).clean() 


class ModelA(models.Model): 
    user = models.ForeignKey(User, related_name = 'modelas') 
    other_field = models.CharField(max_length=50) 

    def clean(self): 
    if (self.user.modelas.all().count() > 2): 
     raise ValidationError(
      "User may create may only create 3 modelAs " 
     ) 
    super(ModelA, self).clean() 
+0

我不確定,但會測試出來。 – edhedges

+0

這似乎工作謝謝! – edhedges