2017-01-15 1 views
1

Как я могу показать столбцы идентификатор, название и год книги вместо «Книги объекта»?Показать столбцы ссылочной таблицы вместо объекта в Django администратора

Этот скриншот показывает текущее состояние:

enter image description here

Мой model.py выглядит следующим образом:

from __future__ import unicode_literals 
from django.db import models 


class Authors(models.Model): 
    name = models.CharField(max_length=45, blank=True, null=True) 
    birthday = models.DateField(blank=True, null=True) 

    class Meta: 
     managed = True 
     db_table = 'authors' 


class AuthorsBooks(models.Model): 
    author_id = models.OneToOneField('Authors', models.DO_NOTHING, db_column='author_id', primary_key=True) 
    book_id = models.OneToOneField('Books', models.DO_NOTHING, db_column='book_id', primary_key=True) 

    class Meta: 
     managed = True 
     db_table = 'authors_books' 
     unique_together = (('author_id', 'book_id'),) 


class Awards(models.Model): 
    author = models.OneToOneField('Authors', models.DO_NOTHING, db_column='author', primary_key=True) 
    award_name = models.CharField(max_length=45) 
    year = models.IntegerField(blank=True, null=True) 

    class Meta: 
     managed = True 
     db_table = 'awards' 
     unique_together = (('author', 'award_name'),) 


class Books(models.Model): 
    titel = models.CharField(max_length=45, blank=True, null=True) 
    year = models.IntegerField(blank=True, null=True) 

    class Meta: 
     managed = True 
     db_table = 'books' 

В классе AuthorsBooks я изменил два внешних ключей OneToOneFields.

Моего admin.py выглядит следующим образом:

from django.contrib import admin 
from myapp.models import Authors 
... 

class AwardsInline(admin.TabularInline): 
    model = Awards 

class AuthorsBooksInline(admin.TabularInline): 
    model = AuthorsBooks 

class AuthorsAdmin(admin.ModelAdmin): 
    list_display = ("name", "birthday") 
    inlines = (AwardsInline, AuthorsBooksInline) 


admin.site.register(Authors, AuthorsAdmin) 

ответ

1

Добавить функцию Юникода в вашем models.py на модель.

class Authors(models.Model): 
    name = models.CharField(max_length=45, blank=True, null=True) 
    birthday = models.DateField(blank=True, null=True) 

    class Meta: 
     managed = True 
     db_table = 'authors' 

    def __unicode__(self): 
     return self.name 
+0

Спасибо это помогло мне немного, я добавил определение функции __unicode __ (Я): возвращение self.title' в класс 'Книги (models.Model)' и теперь титул в на нормальное поле и добавить столбец _year_? – Tuksn

+0

просто добавьте год к возврату функции юникода, например: 'return '{} - {}'. Format (self.title, self.year)'. Теперь я понимаю, что я не ответил на ваш вопрос. Прости. К сожалению, я не знаю, как отображать нужные столбцы. – Lazykiddy

+0

В любом случае, возможно, у кого-то есть идея. – Tuksn