class BoxItem(models.Model):
quantity = models.IntegerField()
class Box(models.Model):
name = models.CharField(max_lenght=150)
item = models.ForeignKey(BoxItem)
管理员:
admin.site.register(BoxItem)
admin.site.register(Box)
如何在BoxItem.quantity
单个对象管理页面中添加编辑Box
值的可能性?
答案 0 :(得分:3)
在admin.py
:
class BoxAdminForm(forms.ModelForm):
box_item_quantity = forms.IntegerField()
def __init__(self, *args, **kwargs):
""" populate box_item_quantity initial value """
super(BoxAdminForm, self).__init__(*args, **kwargs)
if self.instance:
self.initial['box_item_quantity'] = self.instance.item.quantity
class Meta:
model = Box
class BoxAdmin(admin.ModelAdmin):
form = BoxAdminForm
def save_model(self, request, obj, form, change):
super(BoxAdmin, self).save_model(request, obj, form, change)
obj.item.quantity = form.cleaned_data.get('box_item_quantity')
obj.item.save()
admin.site.register(Box, BoxAdmin)
这是有效的,因为您的BoxItem字段是必需的。否则,当Box
没有BoxItem
关联时,可能需要更多逻辑来处理案例。
我必须说,即使它不在问题中:
这个模型架构对我来说非常奇怪。一个BoxItem
实例可以与许多Box
个实例相关联。更改一个quantity
中的BoxItem
也会影响其他Box
个实例,因为它们可能与同一BoxItem
相关联。
(这与管理员无关,无论发生quantity
字段的更改方式都是如此。)