Django TypeError:字段“id”需要一个数字,但得到了<homeworkForm bound=True,valid=Unknown,fields=(title;description;due)>

2024-10-01 22:43:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试允许员工用户将作业发布到数据库中,但我一直遇到上述问题。我尝试设置data['id'] = 0/'',并删除了表和makemigrations/migrate

models.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

form.py

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')

Tags: frompyimportformdatareturnmodelsrequest
3条回答

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

您是否尝试了数据['teacher']=request.user而不是数据['teacher']=request.user.username

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

新表单.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'}),
        }

相关问题 更多 >

    热门问题