【问题标题】:Edit field from ForeignKey in Admin在 Admin 中编辑 ForeignKey 字段
【发布时间】:2014-05-15 16:17:19
【问题描述】:
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)

如何在Box 单对象管理页面中添加编辑BoxItem.quantity 值的可能性?

【问题讨论】:

    标签: python django django-models django-admin django-modeladmin


    【解决方案1】:

    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 实例相关联。在一个BoxItem 中更改quantity 也会影响其他Box 实例,因为它们可以与相同的BoxItem 关联。
    (这与管理员无关,无论以何种方式更改为quantity 字段都是如此。)

    【讨论】:

      猜你喜欢
      • 2012-11-07
      • 1970-01-01
      • 2021-04-28
      • 1970-01-01
      • 2015-05-21
      • 2018-02-17
      • 2011-07-03
      • 1970-01-01
      • 2013-05-23
      相关资源
      最近更新 更多