Прямо сейчас у меня есть две модели: инвентарь и товар.
. У предмета может быть несколько транзакций инвентаризации (вы можете рассматривать их по существу как партии), но транзакция инвентаризации может иметь только один предмет, поэтому однаотношения ко многим, верно?В любом случае, я использую поле внешнего ключа, например, так:
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 []