Python 在Django中将表单字段与模型字段映射
我是django的新手,正在尝试创建一个简单的表单。我使用的是Django3.1.2和Python3.8.3 下面是我的代码Python 在Django中将表单字段与模型字段映射,python,django,Python,Django,我是django的新手,正在尝试创建一个简单的表单。我使用的是Django3.1.2和Python3.8.3 下面是我的代码 型号 class Category(models.Model): categoryid = models.AutoField(primary_key=True) name = models.CharField(max_length=50) class Meta: managed = False db_table =
型号
class Category(models.Model):
categoryid = models.AutoField(primary_key=True)
name = models.CharField(max_length=50)
class Meta:
managed = False
db_table = 'category'
def __str__(self):
return u'{0}'.format(self.name)
class Timesheet(models.Model):
timesheetid = models.AutoField(primary_key=True)
categoryid = models.ForeignKey(Category, models.DO_NOTHING, db_column='categoryid')
summary = models.CharField(max_length=100)
description = models.CharField(max_length=1000, blank=True, null=True)
logdate = models.DateField()
minutes = models.IntegerField(blank=True, null=True)
addeddate = models.DateTimeField(default=datetime.now())
modifieddate = models.DateTimeField(blank=True, null=True)
class Meta:
managed = False
db_table = 'timesheet'
表格
class TimesheetForm(forms.ModelForm):
categoryid = forms.ModelChoiceField(queryset=Category.objects.all().order_by('name'),
empty_label="Select Category",required=True,label='Category',to_field_name='categoryid')
class Meta:
model = Timesheet
fields = ['summary','description','logdate','minutes']
查看
def fill_timesheet(request):
form = TimesheetForm()
if request.method == "POST":
form = TimesheetForm(request.POST)
if form.is_valid():
print(form.cleaned_data['summary'])
print(form.cleaned_data['description'])
print(form.cleaned_data['categoryid'])
form.save(commit=True)
return index(request)
else:
print('ERROR FORM INVALID')
return render(request,'app_timesheet/timesheet.html',{'timesheet_form':form})
下面是我的网页
无论何时尝试保存数据,我都会遇到以下错误
null value in column "categoryid" violates not-null constraint
DETAIL: Failing row contains (32, null, test data, test description, 2020-10-13, 5, 2020-10-15 14:25:40.57836, null).
另外,print(form.cleaned_data['categoryid'])
fill\u时间表视图的语句正在打印类别名称而不是categoryid。
我的问题是如何将表单的categoryid与模型的categoryid链接起来。我想在网页上显示类别下拉列表,并想在表中插入categoryid
任何帮助都将不胜感激。提前谢谢。我想这是因为您没有在
时间表
类的元字段中包含类别ID
class TimesheetForm(forms.ModelForm):
categoryid = forms.ModelChoiceField(queryset=Category.objects.all().order_by('name'),
empty_label="Select Category",required=True,label='Category',to_field_name='categoryid')
class Meta:
model = Timesheet
fields = ['summary','description','logdate','minutes','categoryid']
类时间表格式(forms.ModelForm):
categoryid=forms.ModelChoiceField(queryset=Category.objects.all().order_by('name'),
空\u label=“Select Category”,required=True,label='Category',至\u字段\u name='categoryid')
类元:
模型=时间表
字段=['summary'、'description'、'logdate'、'minutes'、'categoryid']
我认为这是因为在时间表
类的元字段中没有包含类别ID
class TimesheetForm(forms.ModelForm):
categoryid = forms.ModelChoiceField(queryset=Category.objects.all().order_by('name'),
empty_label="Select Category",required=True,label='Category',to_field_name='categoryid')
class Meta:
model = Timesheet
fields = ['summary','description','logdate','minutes','categoryid']
类时间表格式(forms.ModelForm):
categoryid=forms.ModelChoiceField(queryset=Category.objects.all().order_by('name'),
空\u label=“Select Category”,required=True,label='Category',至\u字段\u name='categoryid')
类元:
模型=时间表
字段=['summary'、'description'、'logdate'、'minutes'、'categoryid']
在字段列表中添加categoryid后,它就起作用了。我想我们不需要添加单独定义的字段。在字段列表中添加categoryid后,它就起作用了。我认为我们不需要添加单独定义的字段。