Django 禁止直接分配到多对多集合的前端。改为使用time.set()
我正在尝试用django all auth实现多个singup表单。对于第一个表单,它工作得很好,因为第一个表单不包含任何类型的多对多关系。在第二种形式的情况下,它包含许多多对多不动产船舶。我是django和allauth的新手,我不知道如何处理这个问题。 下面给出了一些代码片段。 models.pyDjango 禁止直接分配到多对多集合的前端。改为使用time.set(),django,Django,我正在尝试用django all auth实现多个singup表单。对于第一个表单,它工作得很好,因为第一个表单不包含任何类型的多对多关系。在第二种形式的情况下,它包含许多多对多不动产船舶。我是django和allauth的新手,我不知道如何处理这个问题。 下面给出了一些代码片段。 models.py class JobSeekerProfile(models.Model): user = models.OneToOneField(User, verbose_name=_("User"
class JobSeekerProfile(models.Model):
user = models.OneToOneField(User, verbose_name=_("User"), on_delete=models.CASCADE)
full_name = models.CharField(max_length=255)
religion = models.ForeignKey(Religion, on_delete=models.CASCADE)
interested_area = models.ManyToManyField(ServiceArea)
interested_time = models.ManyToManyField(WorkingShift)
forms.py
class JobSeekerSignupForm(SignupForm):
full_name = forms.CharField(
..........
)
interested_area = forms.MultipleChoiceField(
required=True,
error_messages={'info': 'Interested Area is required'},
label="Interested Area",
choices=[[0, '']] + [[r.id, r.title] for r in ServiceArea.objects.all()],
widget=forms.SelectMultiple(attrs={
'id': "inputGroup1_17",
'class': select_input_class,
'style': "width: 100%;",
'data-placeholder': "Interested Area ",
'data-open-icon': "fa fa-caret-down",
'data-close-icon': "fa fa-caret-up",
}),
)
........
def save(self, request):
user = super(JobSeekerSignupForm, self).save(request)
user.is_job_seeker = True
job_seeker = JobSeekerProfile(
user=user,
full_name=self.cleaned_data.get('full_name'),
interested_area_set=self.cleaned_data.get('interested_area'),
........
interested_time=self.cleaned_data.get('interested_time'),
)
user.save()
job_seeker.save()
return user
和视图.py
class JobSeekSignupView(SignupView):
template_name = 'user/job-seeker-signup.html'
form_class = JobSeekerSignupForm
redirect_field_name = 'next'
view_name = 'jobseekersignup'
success_url = None
def get_context_data(self, **kwargs):
ret = super(JobSeekSignupView, self).get_context_data(**kwargs)
ret.update(self.kwargs)
return ret
不能直接将值(记录)分配给M2M字段。这是你的电话号码 与此相反:
interested_time=self.cleaned_data.get('interested_time')
首先保存求职者,然后使用add()
,然后通过M2M添加记录:
job_seeker.save()
job_seeker.interested_time.add(cleaned_data.get('interested_time'))
/user/job seeker/signup/int()参数处的TypeError必须是字符串、类似对象的字节或数字,而不是“列表”请求方法:POST请求URL:cleaned_data中的内容。get('Interest_time')?物品清单?如果是,只需将添加第二行更改为
job\u seaker.interest\u time.add(*cleaned\u data.get('interest\u time'))