【问题标题】:ManyToManyFields as IntegerFields in Django admin interfaceDjango管理界面中的ManyToManyFields作为IntegerFields
【发布时间】:2016-08-04 20:58:18
【问题描述】:

假设我有:

class Product(models.Model):
    [...]

class Basket(models.Model):
    content = models.ManyToManyField(Product, through="ProductQuantity")

class ProductQuantity(models.Model):
    basket = models.ForeignKey(Basket)
    product = models.ForeignKey(Product)
    quantity = models.IntegerField(default=0)

如何为Basket 模型渲染一个ModelForm,并为Basket 的每个ProductQuantity 提供一个字段,以便能够修改其quantity 属性?

有我可以使用的小部件吗?

如果我能够用这样的 ModelForm 做这样的事情,我是否可以在 admin.ModelAdmin 中使用 ModelForm 作为替代 form 属性以在管理界面中具有相同的行为?

编辑:

@MuhammadTahir 将此帖子标记为可能与 this post 重复。

它确实帮助我更好地理解,但我仍然卡住:我无法渲染我想要渲染的字段。

到目前为止,这是我的代码:

models.py

同上。

forms.py

ProductQuantityFormSet = inlineformset_factory(Product,
                                               basket.content.through,
                                               fields=("quantity",))

admin.py

class ProductQuantityInline(admin.StackedInline):
    model = ProductQuantity
    formset = ProductQuantityFormSet()

class BasketAdmin(admin.ModelAdmin):
    inline = [ProductQuantityInline,]

【问题讨论】:

标签: django django-forms manytomanyfield django-widget


【解决方案1】:

IRC 上有人发现了问题:

inlineinlinesadmin.ModelAdmin。我什至不需要inlineformset_factory()

所以这是最终代码:

models.py

class Product(models.Model):
    [...]

class Basket(models.Model):
    content = models.ManyToManyField(Product, through="ProductQuantity")

class ProductQuantity(models.Model):
    basket = models.ForeignKey(Basket)
    product = models.ForeignKey(Product)
    quantity = models.IntegerField(default=0)

admin.py

class ProductQuantityInline(admin.StackedInline):
    model = ProductQuantity
    fields = ["quantity",]

class BasketAdmin(admin.ModelAdmin):
    inlines = [ProductQuantityInline,]

我希望这可以帮助其他人。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-08
    • 2015-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    相关资源
    最近更新 更多