форма m2m для подключения профиля к другой модели, Django

#python #django #forms #m2m

Вопрос:

У меня есть отношения «многие ко многим», которые связаны с моделью «профиль». Идея состоит в том, чтобы позволить каждому пользователю выбрать столько ЦУР, сколько он хочет, и создать связь между ними. Однако всякий раз, когда я сохраняю это отношение, новый объект не добавляется в базу данных, но никаких ошибок не создается. В случае, если у кого-то есть идея, почему это происходит, это было бы потрясающе. Итак, вот мой код:

models.py

 class Profile(models.Model):
    id = models.CharField(max_length=50, primary_key= True)
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    sdg = models.ManyToManyField(SDG, through="SDG_User")
    background_picture = models.ImageField(upload_to=profile_pic_directory_path,default="Null")
    profile_picture = models.ImageField(upload_to=profile_pic_directory_path,default="Null")


class SDG_User(models.Model):
    sdg = models.ForeignKey(SDG, on_delete=models.CASCADE)
    user_id = models.ForeignKey(Profile, on_delete=models.CASCADE)

class SDG(models.Model):
    title = models.CharField(max_length=50, unique=True)
    contenu = models.TextField(default="NA")
    image = models.ImageField(upload_to='sdgs/')

    def __str__(self):
        return '{} - {}'.format(self.title, self.contenu)
 

forms.py

 class SDGForm(forms.ModelForm):
    sdg = forms.CheckboxSelectMultiple()
    class Meta:
        model = Profile
        fields = ('sdg',)
 

views.py

 def edit_profile_sdgs(request):
    if request.method == 'POST':
        sdg_form = SDGForm(request.POST,instance=request.user)
        if sdg_form.is_valid():
            sdg = sdg_form.save(commit=False)
            sdg.user = request.user
            sdg.save()
            sdg_form.save_m2m()
            messages.success(request, 'if')
            return redirect(reverse(("accounts:user_profile"),args=[request.user.username]))    

    else:
        sdg_form = SDGForm(instance=request.user)

    return render(request, 'dist/inside/profile/edit/edit_sdg.html', { 'sdg_form': sdg_form,
})
 

Комментарии:

1. Вы работаете с instance=request.user , но это похоже на User объект, а не на Profile .