Question

All my CreateViews are working fine, but this one is not (although this is UpdateView). After checking, trying to identify differences, I find none. Must be something I'm still missing.

Template:

<form method="POST">{% csrf_token %}
        {{ form.non_field_errors }}
        {{ form.errors }}
        {{ form.make }}
        {{ form.make.errors }}
        {{ form.model}}
        {{ form.model.errors }}
        {{ form.year}}
        {{ form.year.errors }}

            <button type="submit"> Save</button>
            <a href="javascript:close_window();"> Close</a>
    </form>

Url paterns in URLS.py:

url(r'^update/(?P<pk>\w+)/$',UpdateView.as_view(
    model=Vehicles,
    form_class=VehiclesForm,
    success_url="/main/",
    template_name="vehicle_detail.html")),

Model:

from django.db import models


class Vehicles(models.Model):
    stock = models.CharField(max_length=10, blank=False, db_index=True)
    vin = models.CharField(max_length=17, blank=False, db_index=True)
    vinlast8 = models.CharField(max_length=8, blank=False, db_index=True)
    make = models.CharField(max_length=15, blank=False)
    model = models.CharField(max_length=15, blank=False)
    year = models.CharField(max_length=4, blank=False)
    deal = models.IntegerField(blank=False, db_index=True, null=True)
    sold = models.DateField(blank=True, null=True, db_index=True)
    origin = models.ForeignKey('origins.Origins', db_column='origin')
    #origin = models.CharField(max_length=10, blank=True)
    bank = models.ForeignKey('banks.Banks', db_column='bank', null=True)
    vehtype = models.ForeignKey('vehtypes.Vehtypes', db_column='vehtype', verbose_name='Veh Type')
    status = models.ForeignKey('status.Status', db_column='status')
    imported = models.DateField()
    clerk = models.CharField(max_length=10, blank=False, db_index=True, verbose_name='Clerk')
    completed = models.DateField(blank=True, null=True)
    registry = models.IntegerField(blank=True, verbose_name='Reg #', null=True)
    plate = models.CharField(blank=True, null=True, max_length=10)
    tagno = models.IntegerField(blank=True, null=True, verbose_name='Tag #')
    tag_exp = models.DateField(blank=True, null=True, verbose_name='Tag Exp')
    unit_linked = models.IntegerField(blank=False, verbose_name='Link')
    salesperson = models.CharField(max_length=20, blank=False, verbose_name='S/person', null=True)
    agent = models.ForeignKey('agents.Agents', db_column='agent', blank=True, null=True)
    tradein1 = models.CharField(max_length=10, blank=True, null=True, verbose_name='stock')
    tr1vin = models.CharField(max_length=17, blank=True, db_index=True, null=True, verbose_name='vin')
    tr1make = models.CharField(max_length=15, blank=True, null=True, verbose_name='make')
    tr1model = models.CharField(max_length=15, blank=True, null=True, verbose_name='model')
    tr1year = models.CharField(max_length=4, blank=True, null=True, verbose_name='year')
    tradein2 = models.CharField(max_length=10, blank=True, null=True, verbose_name='stock')
    tr2vin = models.CharField(max_length=17, blank=True, db_index=True, null=True,verbose_name='vin')
    tr2make = models.CharField(max_length=15, blank=True, null=True,verbose_name='make')
    tr2model = models.CharField(max_length=15, blank=True, null=True,verbose_name='model')
    tr2year = models.CharField(max_length=4, blank=True, null=True,verbose_name='year')
    lhtrade1 = models.CharField(max_length=15, blank=True, null=True, verbose_name='L/holder')
    lh1docreq = models.DateField(blank=True, null=True, verbose_name='D/Requested')
    lh1docrec = models.DateField(blank=True, null=True, verbose_name='D/Received')
    lhtrade2 = models.CharField(max_length=15, blank=True, null=True, verbose_name='L/holder')
    lh2docreq = models.DateField(blank=True, null=True, verbose_name='D/Requested')
    lh2docrec = models.DateField(blank=True, null=True, verbose_name='D/Received')

    cust1name = models.CharField(max_length=40, blank=True, db_index=True, null=True,
                                     verbose_name='name')
    cust1lic = models.CharField(max_length=20, blank=True, db_index=True, null=True,
                                verbose_name='license')
    cust1addr = models.CharField(max_length=40, blank=True, null=True, verbose_name='address')
    cust1city = models.CharField(max_length=15, blank=True, null=True, verbose_name='city')
    cust1state = models.CharField(max_length=2, blank=True, null=True, verbose_name='state')
    cust1zip = models.CharField(max_length=10, blank=True, null=True, verbose_name='zipcode')
    cust1email = models.EmailField(blank=True, null=True, verbose_name='email')
    cust1tel1 = models.CharField(max_length=15, blank=True, verbose_name='Tel. 1', null=True)
    cust1tel2 = models.CharField(max_length=15, blank=True, verbose_name='Tel. 2', null=True)
    cust1ssn = models.CharField(max_length=12, blank=True, db_index=True, null=True,verbose_name='SSN')

    cust2name = models.CharField(max_length=30, blank=True, db_index=True, null=True,
                                     verbose_name='name')
    cust2lic = models.CharField(max_length=20, blank=True, db_index=True, null=True,
                                verbose_name='license')
    cust2addr = models.CharField(max_length=25, blank=True, null=True, verbose_name='address')
    cust2city = models.CharField(max_length=15, blank=True, null=True, verbose_name='city')
    cust2state = models.CharField(max_length=2, blank=True, null=True, verbose_name='state')
    cust2zip = models.CharField(max_length=10, blank=True, null=True, verbose_name='zipcode')
    cust2email = models.EmailField(blank=True, null=True, verbose_name='email')
    cust2tel1 = models.CharField(max_length=15, blank=True, verbose_name='Tel. 1', null=True)
    cust2tel2 = models.CharField(max_length=15, blank=True, verbose_name='Tel. 2', null=True)
    cust2ssn = models.CharField(max_length=12, blank=True, db_index=True, null=True,verbose_name='SSN')

    class Meta:
        db_table = 'vehicles'

    def __unicode__(self):
        return self.stock

    def save(self, *args, **kwargs):
        self.stock = self.stock.upper()

        return super(Vehicles, self).save(*args, **kwargs)

Form:

from django import forms
from models import Vehicles


class VehiclesForm(forms.ModelForm):
    class Meta:
        model = Vehicles

It's a modelform. Firebug and console do report the POST is actually occuring, but record is not updated.

Appreciate anything you realize it's wrong.

Était-ce utile?

La solution

Since, there is no answer...

At first, since you don't modify in any way your form you don't to specify it - ModelForm is implicitly meant in UpdateView by default. So, you don't need this:

form_class=VehiclesForm

Then, in your model (which is huge) you don't need blank=False - it's also defaults.

Your problem, I think, is in field validation procedure. Your template html-form renders only some of fields, but your model has much more (and what is important - they aren't optional and they have no default values). Because of this, you simply don't see validation errors.

if you render whole form like this:

<form method="POST">{% csrf_token %}

    {{ form.as_p }}

    <button type="submit"> Save</button>
    <a href="javascript:close_window();"> Close</a>
</form>

...you'll see validation errors!

PS: If you wanted to render only those fields you must:

1) specify fields attribute with list of those fields:

# django doc example    
class AuthorUpdate(UpdateView):
        model = Author
        fields = ['name']
        template_name_suffix = '_update_form'

2) ensure that you provide all needful data (default or explicitly through form fields) for model instance saving.

3) read the Django docs - it is very detailed and meticulous, good luck!

Autres conseils

For me I have to change

<form action="." .....>

to

<form action="" ..... >
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top