Найти - Пользователи
Полная версия: Отобразить на Django админке связанные объекты
Начало » Django » Отобразить на Django админке связанные объекты
1
pika1989
Всем привет!

Имею две модели, например, Book и Author:
 class Author(models.Model):
    #...
 
class Book(models.Model):
    #...
    author = models.ForeignKey(Author, on_delete=models.CASCADE, default=0, null=False)
Мне необходимо на странице с авторами отображать поле со ссылкой на список книг. Это я сделала так:
 AuthorAdmin(admin.ModelAdmin):
    list_display = ("books_list")
    def books_list(self, obj):                                              
          url = urlresolvers.reverse("admin:author_book_changelist")          
          return u'<a href="%s?%s=%d">%s</a>' % (url, "id", obj.id, "Books")                   
    books_list.short_description = "Book"                                   
    books_list.allow_tags=True
 
 
BookAdmin(admin.ModelAdmin):
    def get_model_perms(self, request):                                                                                                    
        """Return empty perms dict thus hiding the model from admin index."""   
        return {}                                                               
                                                                           
    def get_queryset(self, request):                                            
        qs = super(BookAdmin, self).get_queryset(request)                       
        author_id = request.GET.get('id')                                   
        return qs.filter(author=author_id)                               
И мой вопрос: Почему когда принтую в консоль
 qs.filter(author=author_id)
, то получаю отфильтрованный queryset, а на странице пусто (используется стандартная страница с Django admin)? Что я делаю не так, и, вообще, реально ли такое провернуть с Django. Спасибо.
pika1989
Я разобралась. Нужно было в методе books_list немного изменить ссылку:
 def books_list(self, obj):                                                           
     url = urlresolvers.reverse("admin:author_book_changelist")          
     return u'<a href="%s?%s=%d">%s</a>' % (url, "author__id__exact",    
                                                                        obj.pk, "Books")
А в классе BookAdmin убрать метод get_queryset.
Как-то так.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB