Django 管理界面中的 ManyToManyFields 作为 IntegerFields
ManyToManyFields as IntegerFields in Django admin interface
假设我有:
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 将此 post 标记为 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,]
IRC 上有人发现了问题:
inline
≠inlines
中的admin.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,]
我希望这可以帮助其他人。 :)
假设我有:
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 将此 post 标记为 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,]
IRC 上有人发现了问题:
inline
≠inlines
中的admin.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,]
我希望这可以帮助其他人。 :)