Можно ли использовать форму администратора для прокси-модели в Django со связью ManyToMany? - PullRequest
0 голосов
/ 07 ноября 2018

Я моделирую тест и связанные с ним вопросы следующим образом:

# 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?

...