Добавление полей из отношения "многие-ко-многим" в Django Admin Inline

Я пытаюсь создать проект, в котором у меня есть пользователь, вопросы для пользователей, а затем ответы, которые дают пользователи. Вот мои модели

class User(models.Model):
    name = models.CharField(max_length=20)
    email = models.EmailField()

    def __str__(self):
        return self.name

class Question(models.Model):
    question = models.TextField()

    def __str__(self):
        return self.question

class Answer(models.Model):
    answer = models.TextField()
    user = models.ManyToManyField(User)
    question = models.ManyToManyField(Question)

    def __str__(self):
        return self.answer

Затем в админке я хочу иметь возможность нажать на пользователя и посмотреть его ответы, поэтому я настроил свою админку так.

class AnswerInline(admin.TabularInline):
    model = Answer.user.through

class UserAdmin(admin.ModelAdmin):
    list_display = ('name', 'email')
    inlines = [AnswerInline]

class QuestionAdmin(admin.ModelAdmin):
    list_display = ('question',)

class AnswerAdmin(admin.ModelAdmin):
    list_display = ('answer', )
    fields = ('question', 'answer',)

admin.site.register(User, UserAdmin)
admin.site.register(Question, QuestionAdmin)
admin.site.register(Answer, AnswerAdmin)

Однако при просмотре пользователей отображается только их ответ. Он не показывает вопрос, с которым связан ответ. Как мне добавить эту информацию на страницу администратора таким образом, чтобы это имело смысл. Желательно, чтобы сначала был вопрос, а затем справа от него - ответ на него.

Оказывается, я неправильно настроил модели. Вот как они должны выглядеть.

from django.db import models

class User(models.Model):
    name = models.CharField(max_length=20)
    email = models.EmailField()

    def __str__(self):
        return self.name

class Question(models.Model):
    question = models.TextField(default=None)
    people = models.ManyToManyField(User, through='Answer')

    def __str__(self):
        return self.question

class Answer(models.Model):
    answer = models.TextField()
    user = models.ForeignKey(User, on_delete=models.CASCADE, default=None)
    question = models.ForeignKey(Question, on_delete=models.CASCADE, default=None)

    def __str__(self):
        return self.answer

и вот админ, который работает.

class AnswerInline(admin.TabularInline):
    model = Answer
    fields = ('question', 'answer')
    readonly_fields = ('question', 'answer')
    extra = 0

class UserAdmin(admin.ModelAdmin):
    list_display = ('name', 'email')
    inlines = [AnswerInline]

class QuestionAdmin(admin.ModelAdmin):
    list_display = ('question',)

class AnswerAdmin(admin.ModelAdmin):
    list_display = ('answer',)
    fields = ('question', 'answer', 'user')

Вернуться на верх