Прямое назначение передней стороне множества «многие ко многим» запрещено. Вместо этого используйте интереса_time.set () - PullRequest
0 голосов
/ 17 марта 2020

Я пытаюсь реализовать несколько форм с подпунктом django все аутентификации. Он отлично работает для первой формы, потому что первая форма не содержит какого-либо типа отношения «многие ко многим». В случае второй формы он содержит много много-много реальных кораблей. Я новичок в django и Аллах, я не знал, как справиться с этой проблемой. некоторые фрагменты кода приведены ниже. enter image description here

models.py

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

и views.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

1 Ответ

0 голосов
/ 17 марта 2020

Вы не можете напрямую присвоить значение (запись (я)) полю M2M. Вот примеры .

Вместо этого:

interested_time=self.cleaned_data.get('interested_time')

сначала сохраните JobSeeker, а затем используйте add(), а затем добавьте запись через M2M:

job_seeker.save()
job_seeker.interested_time.add(cleaned_data.get('interested_time'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...