Django一对多,在Admin中动态添加字段

时间:2014-02-12 15:08:19

标签: python django admin django-grappelli

我有以下代码:

class Item(models.Model):
    name = models.CharField(max_length=100)
    keywords = models.CharField(max_length=255)
    type = models.ForeignKey(Type)

    class Meta:
        abstract = True

class Variant(models.Model):
    test_field = models.CharField(max_length=255)

class Product(Item):
    price = models.DecimalField(decimal_places=2, max_digits=8,null=True, blank=True)
    brand = models.ForeignKey(Brand)
    variant = models.ForeignKey(Variant)

    def get_fields(self):
        return [(field.name, field.value_to_string(self)) for field in Product._meta.fields]

    def __unicode__(self):
        return self.name

我正在使用Grappelli。 我希望我的产品有多种变体。我应该使用manytomanyfield吗?

我希望能够直接在Admin中将Variants添加到我的产品中。现在我得到一个没有变种的空的dropwdown(因为它们不存在)。

我认为当你指定外键时Django会自动执行此操作吗?

如何在编辑中直接在我的产品页面上显示Variant字段? 我在管理员中读过有关内联字段的内容吗?

1 个答案:

答案 0 :(得分:2)

嗯,反之亦然:)

1 /将外键字段放在Variant中,而不是放在产品中(您描述的内容实际上是OneToMany关系)。

2 /将Variant链接到admin.py中相对ProductAdmin中的产品作为内联(即VariantInline)。

请参阅文档以获取更多信息:https://docs.djangoproject.com/en/1.6/ref/contrib/admin/#inlinemodeladmin-objects

希望这有帮助!

此致