允许Django Admin表单中的外键字段

时间:2018-09-25 23:04:13

标签: python django django-models django-forms django-views

现在我有两个模型:库存和物料

一个项目可以有多个库存事务(您可以将它们本质上看作是批次),但是一个库存事务只能有一个项目,所以一对多关系对不对?无论如何,我使用的是这样的外键字段:

models.py

class Item(models.Model):
    name            = models.CharField(max_length=40)
    description     = models.TextField()
    brand           = models.CharField(max_length=40)

class Inventory(models.Model):
    item = models.ForeignKey(Item, related_name="inventory")

现在的工作流程是,我在ItemAdmin中创建了一个项目,但是我无权从那里添加库存(批次)。因此,我必须退出并转到InventoryAdmin以添加实际库存。这样做的好处是,在保存InventoryAdmin表单之前,允许我在InventoryAdmin中的一个下拉列表将正在创建的库存链接到我首先创建的项目。

但是,我希望,当我第一次创建该物料时,有一种方法可以将其链接到库存交易记录,以使工作流程更加简化。我担心的是,由于存在外键关系,我无法将库存交易记录添加到尚未创建的项目中。如果有解决方法,我想知道,并且在可能的情况下,我想找到一种方法来阻止(或在之间)验证用户添加项目后对其进行编辑。

以下是一种实现方法,因此在创建库存交易并将其链接到某个项目后,如果我回去尝试编辑该项目,它不会让我这样做,但我想禁用它可以使用表单中的铅笔图标进行编辑。

这是我的admin.py,谢谢:

class ItemAdmin(admin.ModelAdmin):
    list_display = ('name', 'description', 'brand')


class InventoryForm(forms.ModelForm):
    class Meta:
        model = Inventory
        fields = '__all__'

class InventoryAdmin(admin.ModelAdmin):
    form = InventoryForm
    readonly_fields = ('created_at', 'updated_at')
    list_display = ('id', 'item', 'active',  'description')

    def get_readonly_fields(self, request, obj=None):
        if obj:
            return ['item']
        else:
            return []

1 个答案:

答案 0 :(得分:0)

使用双下划线遍历外键树

list_display = ('id', 'item', 'item__description', 'item__brand',  'active',  'description')