2011-11-20 276 views
2

在OneToOneField無線電按鈕映射我有以下幾點:Django的 - 管理界面

class A(models.Model): 
    true_b = models.OneToOneField('B', related_name='is_true') 

    def save(self, *args, **kwargs): 
     if self.true_b not in self.b_set.all(): 
      raise ValueError('True_b has to be among those B that refer to this A') 
     super(A, self).save(*args, **kwargs) 

class B(models.Model): 
    a = models.ForeignKey(A) 
    ... 
    @property 
    def is_true(self): 
     return a.true_b == self 

這將產生具有所有項目在B一個下拉列表,在管理界面爲true_b,和驗證將確保所選項目實際上是指回到A

而不是在管理界面中有一個下拉列表,我怎麼能對B中的每個條目有無線電字段,將選定的項目映射到true_b值?

這樣,選擇項目(而不是查找它的名稱並從下拉列表中選擇)將更容易,用戶將無法選擇任何不屬於A的項目。

回答

0

您可以創建自己的形式爲這個模型,並將其傳遞給管理類

class MyAdmin() 
    class Meta() 
     form=MyFormForAdmin 
+0

是否有可能很快讓'true_b'這個特定的變化而無需重寫爲模型的整個形式? – abstractpaper

+0

您不必重寫整個表單,嘗試創建ModelForm,並且在該字段的init方法更改小部件中。選中此項:https://docs.djangoproject.com/en/1.3/topics/forms/modelforms/ – szaman