Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Django中将表单字段与模型字段映射_Python_Django - Fatal编程技术网

Python 在Django中将表单字段与模型字段映射

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 =

我是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 = '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后,它就起作用了。我认为我们不需要添加单独定义的字段。