Почему форма работает в режиме "is_valid", но не обновляет объекты?

Я пытаюсь обновить это поле, когда я делаю forms.is_valid и печатаю в него что-либо, например print("updated"), как вы можете видеть ниже, эта печать работает нормально, что означает, что is_valid() создает значение True, однако в базе данных ничего не обновляется.

Кто-нибудь может помочь, пожалуйста:

views.py

def review_membership(request, id=None):
    roles = str(User.objects.get(email=request.user).roles.get())
    membership = MemberShip.objects.get(id=id)
    user_admin = User.objects.get(roles__id='Admin')
    forms = MemberShipForm()
    disable_field = True

    if request.user.email == membership.ambassador.email:
        disable_field = False
        if membership.status == "Pending":
            if roles == "SubAmbassador":
                if restrict_see_report(request) == True:
                    field_disabled(forms)

            if request.method == "POST":
                if "update" in request.POST:
                    forms = MemberShipForm(request.POST)
                    # print(User.objects.get(email=membership.ambassador))
                    if forms.is_valid():
                        forms.instance = request.user
                        print('updated')
                        forms.save()
                    messages.success(request, 'This field has updated')
                    return redirect('index:review_membership', membership.id)

forms.py

class MemberShipForm(forms.ModelForm):
    name = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Name', 'class': 'form-control'}))
    price = forms.IntegerField(widget=forms.NumberInput(attrs={'value': 0, 'class': 'form-control'}))
    description = forms.CharField(widget=forms.Textarea(attrs={'placeholder': 'type a description here...',
                                                               'class': 'form-control'}))

    class Meta:
        model = MemberShip
        fields = ['name', 'price', 'description']

models.py

class MemberShip(models.Model):
    name = models.CharField(max_length=20, blank=False)
    description = models.TextField(blank=False, null=True)
    price = models.PositiveIntegerField(default=0)
    ambassador = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
    sub_ambassador = models.ForeignKey(SubAmbassador, on_delete=models.CASCADE, null=True, blank=True)
    status = models.CharField(max_length=20, choices=MEMBERSHIP_STATUS, default='Inactive')

    def __str__(self):
        return self.ambassador.email

    def get_status(self):
        return self.status

Думаю, что проблема в этой строке кода: forms.instance = request.user

Вы присвоили форме неправильный экземпляр, я не думаю, что форма будет валидной, если вы перенесете эту строку вверх (до срабатывания метода form.is_valid())

Я не знаю, какова цель этого задания ... но оно не будет работать, потому что модель пользователя отличается от модели членства...

Если вы хотите присвоить request.user полю user в модели Membership, то вы можете заменить эти строки на следующие:

Instance = form.save( commit=False)
Instance.user = request.user 
instance.save()
Вернуться на верх