CreateView错误NOT NULL约束失败:members_experience.CustomUser_id

时间:2020-07-16 08:55:56

标签: django django-models django-forms django-views django-templates

您好,我有一个CustomUser模型,一个用户可以有一对多的Experinces。事情是,我想在体验上使用CreateView并获取CustomUser的实例。当我尝试发布表单时,收到错误消息NOT NULL约束失败:members_experience.CustomUser_id。

我可以用InlineFormSet解决这个问题,但是在这种情况下,这不是我想要的。我是Django的新手,有什么提示吗?

thx

模型

表1 CustomUser:

bootJar

表2 经验

Class CustomUser(AbstractBaseUser, PermissionsMixin):
        email = models.EmailField(_('Epost'), unique=True,)
        personal_Id = models.CharField(_('Personnummer'),max_length=12, blank=False)
        first_name = models.CharField(_('Förnam'), max_length=30, blank=True)
        middle_name = models.CharField('Mellannamn', max_length=30, blank=True)
        last_name = models.CharField(_('Efternamn'), max_length=30, blank=True)

URL

class Experience(models.Model):
    CustomUser = models.ForeignKey(CustomUser, on_delete=models.CASCADE)
    title = models.CharField(_('Beskrivning'), max_length=200)
    job_type = models.CharField(_('Arbetsform'), max_length=10, choices=JOB_TYPES)
    porfession = models.CharField(_('Yrke'), max_length=10, choices=PROFESSION_LIST)
    posted_on = models.DateTimeField(_('Registrerad'), auto_now_add=True)
    updated_on = models.DateTimeField(_('Senast uppdaterad'), auto_now=True)
    years_of_exp = models.CharField(_('Erfarenhet'), max_length=20, choices=YEARS_OF_EXP, null=True, blank=True)

查看

path('<int:pk>/experienceadd/', views.ExperienceCreate.as_view(), name='ExperienceCreate'),

模板

class ExperienceCreate(CreateView):
    model = Experience
    template_name = 'members/experience_create_form.html'
    success_url = reverse_lazy('MemberIndex')
    fields = ['title', 'job_type', 'porfession', 'years_of_exp']

2 个答案:

答案 0 :(得分:1)

class ExperienceCreate(CreateView):
    model = Experience
    template_name = 'members/experience_create_form.html'
    success_url = reverse_lazy('MemberIndex')
    fields = ['title', 'job_type', 'porfession', 'years_of_exp']

def form_valid(self, form):
        form.instance.CustomUser = self.request.user
        return super(ExperienceCreate, self).form_valid(form)

由于customuser字段是ForeignKey,并且您没有提供null = True,因此Django需要填充ForeignKey ID。

答案 1 :(得分:1)

回应您对Exprator答案的最后评论 无法发表评论,所以我在这里回答了

如果您想为任何特定用户增加体验,请将CustomUser添加到您的createview表单字段中

  fields = ['CustomUser','title', 'job_type', 'porfession', 'years_of_exp']

这样,您将获得一个选择选项字段来选择所需的用户