我有一個模型,Challenge_Question:如何爲多種類型的問題創建django管理內聯?
class ChallengeQuestion(models.Model):
challenge = models.ForeignKey('Challenge')
question = models.CharField(max_length=500)
displayed_answers = models.IntegerField()
required = models.BooleanField()
multiple_choice = 'MC'
fill_in_the_blank = 'FB'
ordering = 'OR'
true_false = 'TF'
question_choices = (
(multiple_choice, 'Multiple Choice'),
(fill_in_the_blank, 'Fill In The Blank'),
(ordering, 'Ordering'),
(true_false, 'True/False'),
)
question_type = models.CharField(max_length=2, choices=question_choices, default=multiple_choice, db_index=True)
對於每個question_type,然後我有一個相關的模型FK到ChallengeQuestion:
class ChallengeQuestionMC(models.Model): #for multiple choice questions
question = models.ForeignKey('ChallengeQuestion')
option = models.CharField(max_length=500)
is_answer = models.BooleanField()
class ChallengeQuestionFB(models.Model): #for fill-in-the-blank questions
question = models.ForeignKey('ChallengeQuestion')
option = models.CharField(max_length=100)
sequence = models.SmallIntegerField(default=1, blank=True, null=True)
class ChallengeQuestionTF(models.Model): #for true/false questions
question = models.ForeignKey('ChallengeQuestion')
is_correct = models.BooleanField()
class ChallengeQuestionOR(models.Model): #for ordering type questions
question = models.ForeignKey('ChallengeQuestion')
option = models.CharField(max_length=500)
sequence = models.SmallIntegerField(default=1, blank=True, null=True)
我很想下一步要做的是有相應的管理工具內嵌選項可用於每個問題,具體取決於question_type。
例如,如果我填寫了True/False類型的challenge_question,我希望可以使用True/False「is_correct」字段進行檢查或不檢查。如果問題是訂購類型,我希望訂單選項可以與順序字段一起提供。等等。
如果我只是添加到admin.py:
class ChallengeQuestionOptionsInline(admin.StackedInline):
model = ChallengeQuestionMC
extra = 2
class ChallengeQuestionAdmin(admin.ModelAdmin):
inlines = [ChallengeQuestionOptionsInline]
admin.site.register(ChallengeQuestion, ChallengeQuestionAdmin)
那麼這顯然是行不通的,我想的方式。我需要在這裏有一些條件邏輯,比如「如果challenge_question是question_type'MC'那麼就使用ChallengeQuestionMC模型,依此類推。
我無法找到任何有關這種條件邏輯如何在django admin inline ...有什麼建議嗎?
您是否試過爲每個問題類型添加內聯並將額外值設置爲0?它在管理頁面上有4個內聯。您可以將一些驗證邏輯添加到挑戰模型中,以便您也不會爲其保存多個類型。 – schillingt
是的,我認爲額外= 0是現在的方式。感謝關於額外驗證邏輯的建議,我認爲你是對的,它是需要的。 – Renkai