Django TypeError:字段'id'期望一个数字,但得到<homeworkForm bound=True,valid=Unknown,fields=(title;descripit



我一直试图允许员工用户将作业发布到数据库中,但我一直遇到上面的问题。我已经尝试过设置data['id'] = 0/''以及删除表和进行migrations/migrate。

型号.py

from django.db import models
from teachers.models import Teacher

class Homework(models.Model):
title = models.CharField(max_length=100)
descripiton = models.CharField(max_length=500)
due = models.DateField()
teacher = models.OneToOneField(
Teacher, null=True, blank=True, on_delete=models.CASCADE)
def __str__(self):
return self.title

表格

from django import forms

class DateInput(forms.DateInput):
input_type = 'date'

class HomeworkForm(forms.Form):
title = forms.CharField(label='Title', max_length=100)
descripiton = forms.CharField(label='Descripiton', max_length=500)
due = forms.DateField(label='Due', widget=DateInput)

views.py

def homework(request):
if request.user.is_authenticated & request.user.is_staff:
if request.method == 'POST':
data = request.POST.copy()
data['teacher'] = request.user.username
request.POST = data
print(request.POST)
form = HomeworkForm(request.POST)
if form.is_valid():
post = Homework(form)
post.save()
messages.info(request, 'Form sent')
print('worked')
return render(request, 'index/index.html')
else:
print('error in form')
form = HomeworkForm()
return render(request, 'dashboard/setHomework.html', {'form': form})
else:
form = HomeworkForm()
return render(request, 'dashboard/setHomework.html', {'form': form})
else:
return redirect('index')

您是否尝试了data['teacher']=request.user而不是data['eacher']=request.user.username?

您不需要使用request.POST.copy()request.POST已经是一个字典了。

我很感激你的回答。我设法通过将表单转换为模型表单来解决这个问题,因为该表单模型更适合这种情况,因为模型字段直接映射到输入。

新表格.py

from homework.models import Homework
from django import forms
class HomeworkForm(forms.ModelForm):
class Meta:
model = Homework
fields = ['title', 'description', 'due']
widgets = {
'due': forms.DateInput(format=('%m/%d/%Y'), attrs={'label': 'due date', 'type': 'date'}),
}

相关内容

最新更新