Я моделирую тест и связанные с ним вопросы следующим образом:
# models
class Question(models.Model):
title = models.TextField()
category = models.TextField()
class Quiz(models.Model):
questions = models.ManyToManyField(Question, through='OrderedQuestion')
class OrderedQuestion(models.Model):
# A through table to allow ordering of questions
question = models.ForeignKey(Question, ...)
quiz = models.ForeignKey(Quiz, ...)
order = models.PositiveIntegerField(default=0)
У меня есть два типа вопросов, которые обрабатываются моделями прокси:
# proxy models to handle specific question categories
class BoatQuestion(Question):
objects = BoatQuestionManager() # handles setting category
class Meta:
proxy = True
и аналогичный для CarQuestion
.
У меня есть строки для BoatQuestions
и CarQuestions
, чтобы они могли редактироваться независимо на странице администрирования Quiz
. Настройка администратора:
class QuestionAdmin(admin.ModelAdmin):
model = Question
class BoatQuestionAdmin(admin.ModelAdmin):
model = BoatQuestion
class CarQuestionAdmin(admin.ModelAdmin):
model = CarQuestion
class BoatQuestionInline(admin.TabularInline):
model = BoatQuestion.quiz.through
def get_queryset(self, *args, **kwargs):
return OrderedQuestion.objects.filter(question__category='boat')
def formfield_for_foreignkey(self, *args, **kwargs):
if db_field.name == 'question':
kwargs['queryset'] = BoatQuestion.objects.all()
return super().formfield_for_foreignkey(db_field, request, **kwargs)
class CarQuestionInline(admin.TabularInline):
# similar to above
class QuizAdmin(admin.ModelAdmin):
model = Quiz
inlines = (BoatQuestionInline, CarQuestionInline)
Кнопки добавления и редактирования для BoatQuestions
и CarQuestions
используют общую форму администратора для Question
. Есть ли способ обеспечить использование формы BoatQuestionAdmin
при редактировании BoatQuestions
inline?