I am trying to override persistence in modelform to add the current user as the owner of the vehicle. But I get a "NoneType" object that does not have a user attribute, What do I forget?
forms.py:
class VehicleForm(ModelForm): class Meta: model = Vehicle exclude = ('slug', 'owner', ) def __init__(self, *args, **kwargs): self.request = kwargs.pop('request', None) super(VehicleForm, self).__init__(*args, **kwargs) def save(self, *args, **kwargs): kwargs['commit']=False obj = super(VehicleForm, self).save(*args, **kwargs) obj.owner = self.request.user obj.save() return obj
my model:
class VehicleBase(models.Model): owner = models.ForeignKey(User) vehicle_type = models.SmallIntegerField(_('kind'), choices=vehicle_types, default=1,) make = models.CharField(_('make'), max_length=31, help_text=_('Maximum is 31 characters.'), ) model = models.CharField(_('model'), max_length=31, help_text=_('Maximum is 31 characters.'), ) class Meta: abstract = True class Vehicle(VehicleBase): name = models.CharField(_('fun name'), max_length=31, help_text=_('Maximum is 31 characters.'), ) slug = models.SlugField(_('slug'), ) def save(self, *args, **kwargs): is_new = self.pk is None if is_new: self.slug = slugify("%s %s %s" %(self.make, self.model, self.name, )) super(Vehicle, self).save(*args, **kwargs)
I use the general view:
url(r'^create/$', 'create_update.create_object', dict(template_name='vehicles/vehicle_create.html', form_class=VehicleForm, post_save_redirect="/vehicles/"), name='vehicle_create'),