您好,我有一个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']
答案 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']
这样,您将获得一个选择选项字段来选择所需的用户