اذهب إلى المحتوى

السؤال

نشر

لدي نموذج Person له علاقة foreign key بـ Post، والذي يحتوي على عدد من الحقول، وأريد عرض حقل المؤلف Author (حقل من نوع CharField) من خلال list_display.

في نموذج PersonAdmin الخاص بي ، أود عرض الكتاب. المؤلف باستخدام list_display:

class PersonAdmin(admin.ModelAdmin):
    list_display = ['post.author',]

لقد جربت جميع الطرق الواضحة للقيام بذلك ، ولكن لا شيء يبدو أنه يعمل ولا أعرف كيفية القيام بذلك.

Recommended Posts

  • 1
نشر

لتستطيع مناداة حقل من الكائنات التي بينها علاقة يمكنك إنشاء دوال في الكائنات حتى تساعد على إرجاع الحقل المطلوب , فمثلاً في حالتك تريد أن تحصل على إسم المؤلف, إذا يمكنك أولا إنشاء دالة عند الكتاب تساعدك على ذلك

class PostAdmin(admin.ModelAdmin):
    list_display = ['title', 'get_author', ]

    def get_name(self, obj):
        return obj.author.name
    get_name.short_description = 'author_name'  #Renames column head

ومن ثم يمكنك في ملف الPerson أن تضع إسم هذه الدالة في الlist_display

class PersonAdmin(admin.ModelAdmin):
    list_display = ['post.author_name',]

 

  • 0
نشر

يمكنك القيام بذلك بالشكل التالي:

# models.py  ضمن الملف
class Author(models.Model):
    name = models.CharField(max_length=255)
class Book(models.Model):
    author = models.ForeignKey(Author)
    title = models.CharField(max_length=255)
# هذه هي الطريقة التي تشير بها إلى اسم مفتاح خارجي في جانغو  
# admin.py ضمن الملف
class BookAdmin(admin.ModelAdmin):
    model = Book
    list_display = ['title', 'get_name', ]
    def get_name(self, obj):
        return obj.author.name
    #يسمح بفرز ترتيب العمود
    get_name.admin_order_field  = 'author'  
    #إعادة تسمية رأس العمود
    get_name.short_description = 'Author Name'  

admin.site.register(Book, BookAdmin)

 

  • 0
نشر

الطريقة الصحيحة للقيام بذلك باستخدام Django 3.2 أو أعلى هي باستخدام display decorator كالتالي

class BookAdmin(admin.ModelAdmin):
    model = Post
    list_display = ['title', 'get_author_name']

    @admin.display(description='Author Name', ordering='author__name')
    def get_author_name(self, obj):
        return obj.author.name

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...