newDev2000
newDev2000

Reputation: 311

Django form not submitting data to database

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

Answers (1)

Rython
Rython

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

Related Questions