Django admin conditional inline
У меня есть модель вопроса, которая может иметь различные типы, такие как SINGLE_ANSWER, MULTIPLE_ANSWER, CODE, ...
MODELS.PY :
class Question(BaseModel):
class QuestionType(models.IntegerChoices):
SINGLE_ANSWER = 1
MULTIPLE_ANSWER = 2
ESSAY = 3
CODE = 4
VIDEO = 5
UPLOAD = 6
class DifficultyLevel(models.IntegerChoices):
EASY = 1
MEDIUM = 2
HARD = 3
question_text = models.TextField()
type = models.IntegerField(choices=QuestionType.choices)
level = models.IntegerField(default=1, choices=DifficultyLevel.choices)
def get_absolute_url(self):
self.get_type_display()
def __str__(self):
return truncatewords(self.question_text, 7)
ADMIN :
@admin.register(Question)
class QuestionAdmin(admin.ModelAdmin):
inlines = [
OptionInline,
CodeInline,
TestCaseInline,
]
При использовании этого кода все инлайны (OptionInline, CodeInline, TestCaseInline) будут отображаться на странице администратора, как показано на рисунке ниже: question admin panel pic
но я хочу, чтобы строчки появлялись всякий раз, когда пользователь выбирает тип, например, OptionInline появляется, когда пользователь выбирает multiple_answer или CodeInline появляется, когда пользователь выбирает CODE из выпадающего списка типов
что я сделал для этого, так это переопределил метод get_inlines
ADMIN :
def get_inlines(self, request, obj: Question):
if obj:
if obj.type in [Question.QuestionType.SINGLE_ANSWER, Question.QuestionType.MULTIPLE_ANSWER]:
return [OptionInline]
elif obj.type == Question.QuestionType.CODE:
return [CodeInline, TestCaseInline]
else:
return []
else:
return []
но у меня проблема
когда я хочу изменить тип после сохранения вопроса, появляется эта ошибка:
(Hidden field INITIAL_FORMS) This field is required.
ManagementForm data is missing or has been tampered with. Missing fields: options-TOTAL_FORMS, options-INITIAL_FORMS. You may need to file a bug report if the issue persists.
и еще я хочу знать, возможно ли показать инлайн сразу после выбора типа из выпадающего списка (до сохранения)