0

我想从具有模型 B 外键的模型 A 创建一个模型表单:

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 对象的列表,但我想要字段 Ba 和 Bc (例如)。我尝试了“fields = ('a', 'ba', 'bc')”和“fields = ('a', 'b_ a', b _c')”但没有结果。

所以我来到了内联表单集,但我没有看到任何限制内联字段集的东西。

我该怎么办 ?谢谢。

4

3 回答 3

1

您可以像这样限制内联字段(当然您仍然需要表单来验证,您可以使用 javascript 或默认值来设置间隙)

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

    #fk_name = "..."
    #max_num = 1
    #extra = 0
于 2012-08-29T11:08:53.553 回答
0

如果您想在选择字段中显示“B”的正确文本,请在您的模型中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
于 2012-08-29T11:17:15.383 回答
0

inlineformset_factory接受form参数,这是您的“B”对象的模型形式类。fields = ('a', 'b')因此,使用in定义一个表单类Meta并将其传递给函数应该会有所帮助。

于 2012-08-29T11:21:48.437 回答