J'essaie de surcharger enregistrer dans le modèle pour ajouter l'utilisateur actuel en tant que propriétaire d'un véhicule. Mais je reçois l'objet 'NoneType' n'a aucun attribut 'user' Qu'est-ce que j'oublie?Comment accéder à la demande dans ModelForm pour ajouter request.user en tant que clé étrangère
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
mon modèle:
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) # Call the "real" save() method.
if is_new:
Calendar.objects.get_or_create_calendar_for_object(self, name = "%s's schedule" %self.name)
class Meta:
unique_together = (("name", "owner",),)
def __unicode__(self):
return u'%s: %s\'s %s %s' %(self.name, self.owner, self.make, self.model,)
def __str__(self):
return self.__unicode__()
def get_absolute_url(self):
return reverse('vehicle_view', kwargs={'object_id':self.id, 'slug':self.slug, },)
J'utilise une vue générique:
url(r'^create/$',
'create_update.create_object',
dict(template_name='vehicles/vehicle_create.html',
form_class=VehicleForm,
post_save_redirect="/vehicles/"),
name='vehicle_create'),
Tu oublies que 'ModelForm' n'a pas d'attribut' request', donc 'self.request' dans votre méthode' 'est save' Aucun » –
@Dominic: voir la méthode '__init__' du formulaire. L'utilisateur définit 'self.request' sur la base de' kwargs'. –
@Manoj - ah, merci. –