Вопрос

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.

Это было полезно?

Решение

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!

Другие советы

For me I have to change

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

to

<form action="" ..... >
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top