Django отображает список отношений ForeingKey - PullRequest
0 голосов
/ 09 апреля 2019

Я использую django 2 и python 3.

В моей модели у меня есть Пользователи, которым может принадлежать список Приложений. Приложения могут иметь только одного владельца. Я использовал ForeingKey так:

class User(AbstractUser):
    # nothing interresting for this question here
    pass


class StoreApplication(models.Model):
    owner = models.ForeignKey(
        User,
        on_delete=models.CASCADE,
        related_name="applications"
    )

Теперь я хотел бы перечислить приложения пользователя на странице администрирования пользователя, например список имен приложений, только для чтения. Не в виде списка, а в режиме редактирования.

Мне известно о InlineModelAdmin, и он, похоже, не решает мою проблему, поскольку включает в себя полные формы заявок для каждого приложения пользователя.

Если я пытаюсь ссылаться на поле как «приложения» в моем пользовательском администраторе:

class UserAdmin(admin.ModelAdmin):
    list_display = ("username", )

    fieldsets = (
        ("Général", {
            "fields": ("username", "applications", )
        }),
    )

Произошла ошибка: Unknown field(s) (applications) specified for User. Check fields/fieldsets/exclude attributes of class UserAdmin.

1 Ответ

1 голос
/ 16 апреля 2019

Вы можете добавить метод в UserAdmin, который возвращает все приложения в виде списка через запятую. Я собираюсь предположить, что в модели StoreApplication есть CharField, который называет объект (имя)

def get_applications(self, obj):
    return ', '.join([app.name for app in obj.applications])

# set the short_description to how you want that field displayed in admin
get_applications.short_description = 'Applications'

Затем просто добавьте get_applications в поля и readonly_fields

...