2012-11-24 71 views
0

首先請有看看下面我的代碼:如何動態地設置模式選擇在Django

Project = models.ForeignKey(Project,null=False, blank=True) 
if Porject is 'A': 
    Owner = models.CharField(max_length=100, choices=**owner_set_A**) 
else: 
    Owner = models.CharField(max_length=100, choices=**owner_set_B**) 

所以車主選擇應該從owner_set_A切換到B,它depense對項目的價值。 我是誰告訴我怎樣能做到這一點, 感謝鄧肯的答覆,但我應該在models.Model

class Task(models.Model): 
    project = models.ForeignKey(Project,null=False, blank=True) 
    if Porject is 'A': 
     Owner = models.CharField(max_length=100, choices=**owner_set_A**) 
    else: 
     Owner = models.CharField(max_length=100, choices=**owner_set_B**) 

做的是有沒有辦法讓項目字段的值?

回答

1

您不需要兩個單獨的字段。該字段只是保存數據,您需要過濾用戶以其形式呈現的內容choices。如果您正在使用例如admin界面,你可以這樣做(未經測試)

class MyModelForm(forms.ModelForm): 
    def __init__(self, *args, *kwargs): 
     super(MyModel, self).__init__(args, kwargs) 
     if self.fields['project'].foo == "bar": 
      self.fields['owner'].choices = ((0, "X"), (1, "Y"),...) 
     else: 
      self.fields['owner'].choices = ((0, "A"), (1, "B"),...) 

    class Meta: 
     model = MyModel 

admin.py

class MyModelAdmin(admin.ModelAdmin): 
    form = MyModelForm 
+0

提米嗨,請參閱我的意見 – jimwan

+1

我看了你的更新。關鍵是你不應該試圖在模型中做到這一點,它不是正確的地方。你沒有兩個單獨的*類型的字段,你有兩個不同的*集數據*在現場。出於這個原因,您應該過濾可以保存在不同層的字段中的值,例如表單層甚至模板層 –