Reputation: 311
I've dig through old post about this topic but like allways nothing works for me. My problem is that data isn't saved. I've printed out form and it's okey, then I've printed out forms.is_valid which gave me true, forms.save() also returns customer object so I don't know where to look now (this form updates user shipping data)
form
class customerUpdate(ModelForm):
class Meta:
model = ShippingAddress
fields = ['city', 'country','zip_code','adress','phone',]
exclude = ['customer','order','date_added']
widgets ={
'city' :forms.TextInput(attrs={'class':'updateForm',}),
'country' :forms.TextInput(attrs={'class':'updateForm',}),
'zip_code' :forms.TextInput(attrs={'class':'updateForm',}),
'adress' :forms.TextInput(attrs={'class':'updateForm',}),
'phone' :forms.TextInput(attrs={'class':'updateForm',}),
}
Model
class ShippingAddress(models.Model):
customer = models.ForeignKey(Customer, on_delete=models.SET_NULL, blank=True, null=True)
order = models.ForeignKey(Order, on_delete=models.SET_NULL, blank=True, null=True)
city = models.TextField(max_length=50, null=True, blank=True)
country = models.TextField(max_length=50, null=True, blank=True)
zip_code = models.TextField(max_length=15, null=True, blank=True)
phone = models.TextField(max_length=9, null=True, blank=True)
adress = models.TextField(max_length=100, null=True, blank=True)
date_added = models.DateTimeField(auto_now_add=True)
def __str__(self):
return str(self.adress)
views
def userView(request):
userData = request.user.customer
forms = customerUpdate(instance=userData)
if request.method == "POST":
forms = customerUpdate(request.POST, instance=userData)
if forms.is_valid():
forms.save()
context={
'userData':userData,
'forms':forms
} return render(request,'user.html', context)
html
{% load i18n %}
<div class="editUserInfoWrapper">
<form method="POST" action="{% url 'user' %}"class="formUserPanel" >
{% csrf_token %}
<div class="container">
<div class="row">
<div class="col-sm-12 col-md-6">
<div class="form-group">
{{ forms.city }}
</div>
</div>
<div class="col-sm-12 col-md-6">
<div class="form-group">
{{ forms.country }}
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12 col-md-6">
<div class="form-group">
{{ forms.zip_code }}
</div>
</div>
<div class="col-sm-12 col-md-6">
<div class="form-group">
{{ forms.adress }}
</div>
</div>
</div>
<div class="row">
<div class=" col-3">
</div>
<div class="col-sm-12 col-md-6">
<div class="form-group">
{{ forms.phone }}
</div>
</div>
<div class=" col-3">
</div>
</div>
<div class="row">
<div class="col-12">
<button type="submit" class="btnSbtRegister">
</button>
</div>
</div>
</div>
</form>
</div>
Upvotes: 0
Views: 122
Reputation: 46
Let's go down the list. In your views, have you tried userData = request.user
instead of userData = request.user.customer
?
Also, you can try
if request.method = 'post':
form = customerUpdate(request.data)
if form.is_valid():
form.save(commit=False)
form.customer = request.user
form.save()
....
Upvotes: 1