Может ли list_display в Django ModelAdmin отображать другие поля созданной таблицы? - PullRequest
0 голосов
/ 25 февраля 2020

Я не могу получить "list_display" для отображения поля из связанной таблицы.

models.py

class product(models.Model):
    product_id = models.AutoField(primary_key=True)
    EAN = models.CharField(unique=True, editable=False, max_length=13)
    Product_name = models.CharField(max_length=50)

class price(models.Model):
    price_id = models.AutoField(primary_key=True)
    EAN = models.ForeignKey(product, to_field="EAN", on_delete=models.CASCADE)
    Vendor = models.ForeignKey(vendor, to_field="Vendor_name", on_delete=models.CASCADE)
    Qty = models.CharField(max_length=15)
    Price = models.DecimalField(max_digits=8, decimal_places=2, null=True)

    panels = [
        FieldPanel('EAN'),
        FieldPanel('Vendor'),
        FieldPanel('Qty'),
        FieldPanel('Price'),
    ]

hooks.py

class price_admin(ModelAdmin):
    model = pricelist
    menu_label = 'price'
    menu_icon = 'pilcrow'
    menu_order = 300
    add_to_settings_menu = False
    exclude_from_explorer = False
    list_display = ('EAN_id', 'Vendor_id', 'Price') # <-Here I have a problem
    list_filter = ('Vendor_id__Name',)
    search_fields = ('Vendor_id__Name', 'EAN_id__EAN')

Я могу заставить "Vendor_id__Name" работать в "list_filter" и "search_fields" , но когда я помещаю "Vendor_id__Name" в list_display , я получаю эту ошибку:

AttributeError: Unable to lookup 'EAN_id__Product_name' on price or price_admin

Итак, как правильно отобразить поле (Vendor_id__Name в моем случае) из связанной таблицы? Любая помощь будет принята с благодарностью !!

1 Ответ

1 голос
/ 25 февраля 2020

Как заметил Иван Старостин, в названии соответствующего поля есть опечатка. Другой вариант, который вы можете использовать - поле метода или в основном - вызываемый, который список отображения действительно принимает:

class price_admin(ModelAdmin):
    ...
    list_display = ('vendor_name', # other fields)

    def vendor_name(self, obj):
        return obj.EAN.Product_name
    vendor_name.short_description = 'Vendor name'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...