2012-08-29 103 views
0

接入領域,我想創建具有外鍵B型模型中的一個的ModelForm:Django的形式 - 的外鍵

class A(models.Model): 
    a = models.CharField(...) 
    b = models.ForeignKey(B) 
    c = models.CharField(...) 

class B(models.Model): 
    a = models.IntegerField(...) 
    b = models.CharField(...) 
    c = models.BooleanField(...) 

所以我這樣做:

class AForm(forms.ModelForm): 
    class Meta: 
     model = A 

但我只想某些領域:

class AForm(forms.ModelForm): 
    class Meta: 
     model = A 
     fields = ('a', 'b') 

的問題是在這裏,我不希望b爲b對象的列表,但我想要的字段巴和B.c(例如)。我試過「fields =('a','b.a','b.c')」和「fields =('a','b_ a',b _c')」,但是沒有成果。

所以我來到inline formsets,但我沒有看到任何限制內聯字段的設置。

我該怎麼辦?謝謝。

+0

可能重複[如何在Django ModelForm中過濾ForeignKey選項?](http://stackoverflow.com/questions/291945/how-do-i-filter-foreignkey-choices-in-a-django- modelform) –

+0

從我的理解,這更多的是關於過濾選擇,這不是我想要做的。 –

回答

1

您可以限制這樣的內聯字段如果你想顯示爲「B正確的文本(ofcourse你仍然需要表單驗證,你可以使用JavaScript或默認值設置缺口)

class MyModelInline(admin.TabularInline): 
    model = MyModel 
    fields = ["x", "y", "z"] 

    #fk_name = "..." 
    #max_num = 1 
    #extra = 0 
+0

如何在ModelForms上使用admin.TabularInline? –

+0

文檔:https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.form –

+0

但是,這隻適用於管理網站,我錯了嗎? –

0

'在選擇字段中,在您的模型B中添加__unicode__方法並返回字符串使用字段B,

例如,

class B(models.Model): 
    a = models.IntegerField(...) 
    b = models.CharField(...) 
    c = models.BooleanField(...) 
    def __unicode__(self): 
     return u''+str(self.a) + ':' + self.b 
0

inlineformset_factory接受form的說法,這是你的 「B」 對象的ModelForm類。因此,在Meta中使用fields = ('a', 'b')定義表單類並將其傳遞給該函數應該會有所幫助。