【发布时间】:2021-02-27 04:29:12
【问题描述】:
您好,我有多个复选框选择的问题 我有这个表格
类 AnswerForm(forms.ModelForm): 元类: 模型 = 响应 字段 = ('答案', )
def __init__(self, *args, **kwargs):
question = kwargs.pop('question')
super().__init__(*args, **kwargs)
self.fields['answer'].queryset = question.answers.order_by('text')
if question.question_field_type == 'multiple':
self.fields['answer'] = forms.ModelMultipleChoiceField(
widget=forms.CheckboxSelectMultiple(
attrs={'autocomplete': 'off'}),
queryset=question.answers.order_by('text'),
)
我的问题是提交时会引发此错误
"<QuerySet [<Answer: A. High School Diploma>, <Answer: B. Associate's Degree>]>": "Response.answer" must be a "Answer" instance.
如何使这些返回答案实例而不是查询集。
型号
class Question(models.Model):
RADIO = 'radio'
SELECT = 'select'
TEXT = 'text'
MULTI = 'multiple'
QUESTION_TYPES = (
(RADIO, 'radio'),
(SELECT, 'select'),
(TEXT, 'text'),
(MULTI, 'multiple'),
)
text = models.CharField(
max_length=512,
help_text="this text will be displayed to the user taking the survey"
)
question_number = models.PositiveIntegerField(
default=0,
help_text='Use for question ordering, by default questions are ordered by text'
)
partner_related_question = models.BooleanField(
default=False,
help_text='this will be used to match ideal partner against user choices'
)
question_field_type = models.CharField(
choices=QUESTION_TYPES, max_length=15)
created_date = models.DateField(auto_now_add=True)
objects = QuestionManager()
class Meta:
ordering = ['question_number']
def __str__(self):
return self.text
class Answer(models.Model):
question = models.ForeignKey(
Question, on_delete=models.CASCADE, related_name='answers')
text = models.CharField('Answer', max_length=512)
def __str__(self):
return self.text
class Response(models.Model):
person = models.ForeignKey(
Person, on_delete=models.CASCADE, related_name='person_answers')
answer = models.ForeignKey(
Answer, on_delete=models.CASCADE, related_name='+')
created = models.DateTimeField(default=now, editable=False)
【问题讨论】:
-
你能发布你的models.py
-
更新了模型@EricAcevedo
标签: python django django-forms