1
我有一个表单,我试图限制出现在字段'问题'(在这种情况下,我只想要用户创建的问题)的选择。这种方法与其他形式的工作,但它不工作这一次 - 可能是因为它是一个ModelFormset,而不仅仅是一个的ModelForm属性没有被传递到modelform构造函数,当modelformset_factory
确切的错误是 - “NoneType”对象有没有属性“用户名”,我怀疑这意味着'用户'对象没有被传递给AnswerForm的构造函数。问题是,我不知道为什么它没有被通过
#views.py
def add_answer(request):
a_form = modelformset_factory(Answer, form=AnswerForm(user=request.user), fields='__all__', min_num=2, max_num=4, validate_min=True)
if request.method == "POST":
form = a_form(request.POST)
if form.is_valid():
#Do something
return render(request, 'site/addanswer.html', {'a_form': a_form})
#forms.py
class AnswerForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user', None)
super(AnswerForm, self).__init__(*args, **kwargs)
self.fields['question'] = forms.ModelChoiceField(queryset=Question.objects.filter(user__username=self.user.username))
class Meta:
model = Answer
fields = ('question', 'answer', 'correct')
#models.py
class Question(models.Model):
user = models.ManyToManyField(User)
test = models.ForeignKey(Test, on_delete=models.CASCADE)
question = models.TextField(max_length=1000)
def __str__(self):
return "{0}".format(self.question)
class Answer(models.Model):
question = models.ForeignKey(Question)
answer = models.TextField(max_length=1000)
correct = models.BooleanField()
def __str__(self):
return "{0}".format(self.answer)
没有答案,但你为什么使用'user.username'? 'queryset = Question.objects.filter(user = self.user)'应该足够了。 – ilse2005
也许'self.user'被'super'覆盖。尝试'user = kwargs.pop('user',None)''和'self.fields ['question'] = forms.ModelChoiceField(queryset = Question.objects.filter(user = user))' – ilse2005
@ ilse2005这很奏效,但现在它给了我一个不同的错误 - **'AnswerForm'对象没有属性'__name __'** – user2151557