Разрешить поля внешнего ключа в формах администратора Django - PullRequest
0 голосов
/ 26 сентября 2018

Прямо сейчас у меня есть две модели: инвентарь и товар.

. У предмета может быть несколько транзакций инвентаризации (вы можете рассматривать их по существу как партии), но транзакция инвентаризации может иметь только один предмет, поэтому однаотношения ко многим, верно?В любом случае, я использую поле внешнего ключа, например, так:

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 голосов
/ 26 сентября 2018

используйте двойное подчеркивание для обхода дерева внешних ключей

list_display = ('id', 'item', 'item__description', 'item__brand',  'active',  'description')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...