现在我有两个模型:库存和物料
一个项目可以有多个库存事务(您可以将它们本质上看作是批次),但是一个库存事务只能有一个项目,所以一对多关系对不对?无论如何,我使用的是这样的外键字段:
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 []
答案 0 :(得分:0)
使用双下划线遍历外键树
list_display = ('id', 'item', 'item__description', 'item__brand', 'active', 'description')