【发布时间】:2020-07-03 08:15:59
【问题描述】:
我有一些模型如下:
models.py
from django.db import models
SET_CHOICES = [
('A', 'Set A'),
('B', 'Set B'),
('C', 'Set C'),
('D', 'Set D')
]
class Exam(models.Model):
exam_name = models.CharField(max_length=255)
sub_code = models.CharField(max_length=10)
sub_name = models.TextField()
max_marks = models.PositiveIntegerField()
def __str__(self):
return f'{self.sub_code}: {self.sub_name}'
class ExamSet(models.Model):
which_exam = models.ForeignKey(Exam,on_delete=models.CASCADE)
set_name = models.CharField(
max_length=1,
choices=SET_CHOICES,
default='A',
)
def __str__(self):
return f'{self.which_exam.sub_code}: {self.which_exam.sub_name} (Set {self.set_name})'
class Question(models.Model):
for_which_exam_set = models.ForeignKey(ExamSet, on_delete=models.CASCADE)
question_order = models.PositiveIntegerField(blank=True)
question_text = models.TextField()
max_marks = models.PositiveIntegerField()
def __str__(self):
return f'{self.for_which_exam_set}: {self.question_text}'
class Choices(models.Model):
choice_text = models.TextField()
is_correct = models.BooleanField()
for_which_question = models.ForeignKey(Question, on_delete=models.CASCADE)
admin.py
from django.contrib import admin
from django.forms import TextInput, Textarea
from django.db import models
from .models import Exam, ExamSet, Question, Choices
# Register your models here.
class QuestionInline(admin.TabularInline):
model = Question
extra = 0
ordering = ("question_order",)
formfield_overrides = {
models.TextField: {'widget': Textarea(attrs={'rows':3, 'cols':50})},
}
class ChoicesInline(admin.TabularInline):
model = Choices
extra = 0
formfield_overrides = {
models.CharField: {'widget': TextInput(attrs={'size':'20'})},
models.TextField: {'widget': Textarea(attrs={'rows':2, 'cols':30})},
}
class QuestionAdmin(admin.ModelAdmin):
list_display = ('question_text', 'max_marks', )
inlines = [
ChoicesInline
]
formfield_overrides = {
models.TextField: {'widget': Textarea(attrs={'rows':3})},
}
class ExamSetAdmin(admin.ModelAdmin):
inlines = [
QuestionInline
]
admin.site.register(ExamSet, ExamSetAdmin)
admin.site.register(Question, QuestionAdmin )
admin.site.register(Exam)
但我想要的是对ExamSet 中的每个问题都有选择。所以,
如何将选项也保留在问题和问题的内联中?
我也应该能够通过选项添加问题。
任何帮助都会很有用。
【问题讨论】:
-
Django 不支持,必须使用第三方库
-
@minglyu 任何这样的建议都会很有用
标签: python-3.x django inline-formset