2011-11-20 224 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