🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ فرشاد صادقی
حل مشکل list_display برای ForeignKey ها
Reza Mobaraki حل شده توسط Reza Mobaraki

توی پایتون نسخه 3.2 برای list_display مربوط به ForeignKey‌ها نمیتونیم مثلا از 'category__name' استفاده کنیم.

بجاش باید از همچین متدی استفاده کنیم :

class ProductAdmin(admin.ModelAdmin):
    list_display = ['upc', 'title', 'is_active',
    'category_name',
    'brand_name'
    ]
    def category_name(self, instance):
        return instance.category.name
    def brand_name(self, instance):
        return instance.brand.name

درود وقتتون بخیر
درسته وقتی که با یک ForeignKey در مدل Django کار می‌کنید و قصد دارین از `list_display` در پنل مدیریت استفاده کنین، باید از تعریف توابع کمکی برای نمایش اطلاعات مربوط به ForeignKey استفاده کنید، همانند کدی که شما ارائه داده‌اید.

با این روش، شما یک تابع به نام `category_name` و `brand_name` تعریف میکنید که به عنوان فیلد‌های `category` و `brand` از مدل `Product` در `list_display` استفاده میشه.

نکته: اگر قصد دارید این تابع‌ها به عنوان `sortable` نیز عمل کنند، می‌توانید آن‌ها را به صورت `sortable` نیز تعریف کنین:

class ProductAdmin(admin.ModelAdmin):
   list_display = ['upc', 'title', 'is_active',
   'category_name',
   'brand_name'
   ]
   list_select_related = ['category', 'brand']
   def category_name(self, instance):
       return instance.category.name
   category_name.admin_order_field = 'category__name'
   def brand_name(self, instance):
       return instance.brand.name
   brand_name.admin_order_field = 'brand__name'

در اینجا `list_select_related` برای بهینه‌سازی کوئری‌ها استفاده میشه و همچنین با تعیین `admin_order_field` اطلاعات مربوط به مرتب‌سازی را نیز تعیین شده.

بهترین پاسخ
Reza Mobaraki ۲۷ آبان ۱۴۰۲، ۱۰:۱۱