2010-02-03 3 views
1

J'utilise ce code dans un de mes vues:enregistrer des photos de problème dans une vue à l'aide django-imagekit

if request.method == 'POST': 
     vehicle = VehicleForm(request.POST or None) 
     photos = PhotosFormSet(request.POST or None) 
     if vehicle.is_valid(): 
     vehicle.save() 
     photos = PhotosFormSet(request.POST, instance=vehicle) 
     photos.save() 
     return HttpResponseRedirect('/vehicles/') 
    else: 
     vehicle = VehicleForm() 
     photos = PhotosFormSet(instance=Vehicle()) 

    return render_to_response('vehicles/vehicles-add-edit.html', 
      {'vehicle': vehicle, 'photos': photos}, 
      context_instance=RequestContext(request)) 

Mais je reçois une erreur: 'VehicleForm' object has no attribute 'pk' lorsque je tente de soumettre le formulaire.

J'ai déclaré PhotosFormSet comme:

from django.contrib.contenttypes.generic import generic_inlineformset_factory 
PhotosFormSet = generic_inlineformset_factory(Photo, extra=10) 

Alors ma Photo classe est la suivante:

class Photo(ImageModel): 
    name = models.CharField(max_length=100) 
    original_image = models.ImageField(upload_to='photos') 
    num_views = models.PositiveIntegerField(editable=False, default=0) 
    position = models.ForeignKey(PhotoPosition) 
    content_type = models.ForeignKey(ContentType) 
    object_id = models.PositiveIntegerField() 
    content_object = generic.GenericForeignKey('content_type', 'object_id') 

    class IKOptions: 
    spec_module = 'specs' 
    cache_dir = 'photos' 
    image_field = 'original_image' 
    save_count_as = 'num_views' 
+0

Hey Stephen, je fais quelque chose de semblable et je reçois la même erreur que vous obtenez, mais pour la méthode GET. "photos = PhotosFormSet (instance = Vehicle())" comment cette ligne fonctionne-t-elle (dans le "else") si elle n'a pas été sauvegardée, donc sans pk? –

Répondre

0

Voici votre problème:

vehicle.save() 
photos = PhotosFormSet(request.POST, instance=vehicle) 

vehicle ici est la forme, pas l'objet Véhicule. .save() renvoie un nouveau véhicule, mais vous ne le définissez pas sur une variable, il est donc perdu. Vous passez ensuite la forme, pas le nouvel objet, au formset.

Au lieu de cela, faites juste ceci:

new_vehicle = vehicle.save() 
photos = PhotosFormSet(request.POST, instance=new_vehicle) 
+0

Je ne peux pas croire que j'ai raté ça ... putain !!! Thnx Daniel – Stephen

+0

N'oubliez pas d'accepter la réponse ... –

Questions connexes