Почему форма работает в режиме "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()