Django“列'email_id'不能为空”

时间:2018-08-22 06:58:52

标签: django python-3.x django-models django-views

“列'email_id'不能为空”这是我在尝试登录用户时填写表单时遇到的错误,只有登录用户才能访问以更新其日常工作。< br /> 这是模型:

class User(AbstractBaseUser):
 sys_id = models.AutoField(primary_key=True, blank=True)
 email = models.EmailField(
    verbose_name='email address',
    max_length=255,
    unique=True,
 )
 first_name = models.CharField(max_length=50,blank=True,null=True)
 last_name = models.CharField(max_length=50,blank=True,null=True)
 address = models.TextField(max_length=300,blank=True,null=True)
 DOB = models.DateField('Date of Birth', blank=True, null=True)
 DOJ = models.DateTimeField(auto_now=True)
 active = models.BooleanField(default=True)
 staff = models.BooleanField(default=False) 
 admin = models.BooleanField(default=False)

class services(models.Model):
 taskid = models.AutoField(primary_key=True, blank=True)
 client = models.CharField(max_length=50,blank=True,null=True)
 project = models.CharField(max_length=50,blank=True,null=True)
 taskTime = models.DateTimeField('Task Time', blank=True, null=True)
 hours = models.TimeField(blank=True, null=True)
 minutes = models.TimeField(blank=True, null=True)
 Description = models.TextField(max_length=300,blank=True,null=True)
 email = models.OneToOneField(User, on_delete=models.CASCADE)

这是表格:

class ServiceForm(forms.ModelForm):
class Meta:
    model = services
    fields = ('client','project','taskTime','hours','minutes','Description')

这是视图:

@login_required
def service(request):
  if request.method == 'POST':
      user_form = ServiceForm(data=request.POST)
      if user_form.is_valid():
          user_form.email = request.user.email
          user_form.save()
      else:
          print(user_form.errors)
  else:
      user_form = ServiceForm()
  return render(request, 'service.html', {
    'user_form':user_form})

我的主要问题是用户登录并尝试创建服务,或者他的工作详细信息用户ID应该自动分配给服务模型。请帮我解决这个问题。
我的问题是,当我创建任务时,它的用户名是电子邮件,当我创建任务时,它应该自动分配给它,因为提到的重复重复创建第一个表单时分配用户名很容易,但是我的问题是我正在创建另一个表单用户登录时填写表单,默认情况下应将该用户ID分配给该表单。

1 个答案:

答案 0 :(得分:0)

您应使用所需信息预先填充表格。由于email是与OneToOne的{​​{1}}关系(那里的命名很混乱!),因此您应该使用User对象,而不是电子邮件地址:

request.user