我正在为此模型创建表格
class SemAssign(models.Model):
staff = models.ForeignKey(User, on_delete=models.CASCADE)
semester = models.ForeignKey(Subject, on_delete=models.CASCADE, default=1)
def __str__(self):
return f'{self.staff.username}'
和我的forms.py
看起来像
class SemAssignForm(forms.ModelForm):
class Meta:
model = SemAssign
fields = ['staff','semester']
并且我像views.py
一样基于用户定义的过滤器进行了查询集>
def assign_sem(request): if request.user.is_staff: dept = request.GET.get('department') sem = request.GET.get('semester') form=SemAssignForm(request.POST) #form.fields['staff'].queryset = User.objects.filter(is_staff=True, profile__Department=dept) #form.fields['semester'].queryset = Subject.objects.filter(sem=sem) if form.is_valid(): SemAssign=form.save() return redirect('dashboard')
当查询正常运行时,表单被确认为错误。并且,如果我不进行查询,则表单已成功验证。我确定我在查询外键集时丢失了某个地方。有人可以找我吗?
我的朋友建议我使用modelformset,但这不是我的范围。我只想基于SemAssign
请求过滤器过滤GET
模型的字段。
我正在为此模型类SemAssign(models.Model)创建一个表单:staff = models.ForeignKey(User,on_delete = models.CASCADE)学期= models.ForeignKey(Subject,on_delete = models.CASCADE,...] >
您应该分离用于创建表单和处理提交的表单的代码。通常,第一个是GET,第二个是POST。所以像这样:
def assign_sem(request):
if request.method == 'GET':
# Your code to create the form and set the right querysets
elif request.method == 'POST'::
# Your code to check that the submitted form is valid and save it