【问题标题】:Django "Column 'email_id' cannot be null"Django“列'email_id'不能为空”
【发布时间】:2018-08-22 06:58:51
【问题描述】:

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

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 分配给此表单。

【问题讨论】:

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


【解决方案1】:

您应该在表单中预先填写所需信息。因为emailOneToOneUser 的关系(令人困惑的命名!),您应该使用request.user 对象,而不是电子邮件地址:

  user_form = ServiceForm(data=request.POST, initial={'email': request.user})

【讨论】:

  • 我收到与之前相同的错误“列'email_id'不能为空”
  • @NagaTeja 您应该将email 添加到表单中的fields 列表中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-06
  • 2018-10-13
  • 2016-02-24
  • 1970-01-01
  • 2021-09-03
  • 2016-12-14
相关资源
最近更新 更多