2010-02-03 26 views
1

我使用這個代碼在我的意見之一:問題保存照片使用的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)) 

但我得到一個錯誤:'VehicleForm' object has no attribute 'pk'當我嘗試提交表單。

我已經聲明PhotosFormSet爲:

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

然後我Photo類如下:

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

嘿斯蒂芬,我在做類似的事情,我讓你都拿到,但GET方法相同的錯誤。 「photos = PhotosFormSet(instance = Vehicle())」如果它沒有被保存,這條線如何工作(在「其他」)? – 2013-01-04 12:40:45

回答

0

這是你的問題:

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

vehicle這裏的形式,不是車輛對象。 .save()會返回一個新的Vehicle,但您不會將其設置爲一個變量,因此它會丟失。然後,您將表單傳遞給formset,而不是新對象。

相反,只是這樣做:

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

不能相信我錯過了......該死! Thnx丹尼爾 – Stephen 2010-02-03 10:33:48

+0

不要忘記接受答案... – 2010-02-03 11:36:06