Skip to main content
 首页 » 编程设计

python之Django: AttributeError之对象没有属性

2025年05月04日31jiqing9006

此 View 抛出 AttributeError 说:'PhotoForm' 对象没有属性 'reservation'。发生了什么——函数通过了,但实际上并没有上传图像。在调试时,表单无效。

我试过打印

  • 表格.预订
  • 表单.消息
  • 表格.照片

但这显示了此回溯(这就是表单无效且未完成功能的原因。

当我根据其他可用的函数构建它时,我有点困惑。感谢您的帮助!

HTML 表单

<form action="/photo/new/" method="post">{% csrf_token %} 
    <dl> 
        <dt>{{ form.reservation.label }}</dt> 
            <dd><select name="reservation"> {% for reservation in reservations %} <option value="{{reservation.id}}">{{reservation.date}} {{reservation.chef.cook.get_profile.firstname}} - {{reservation.guest.get_profile.firstname}}</option>{% endfor %}</select></dd> 
        <dt>{{ form.photo.label }}</dt> 
            <dd>{{ form.photo }}</dd> 
        <dt> {{ form.message.label }}</dt> 
            <dd>{{ form.message }}</dd> 
    </dl> 
<button type="submit">Submit</button> 
</form> 

View

@login_required 
def new_photo(request, template_name="photo/newphoto.html"): 
 
  meals = Reservation.objects.filter(guest=request.user.id) 
  form = PhotoForm(request.POST) 
  form.data = { "reservations": meals } 
  if request.method == 'POST': 
    form.photographer = request.user 
    form.data.get('reservation') 
    print form.reservation 
    print form.message 
    print form.photo 
    if form.is_valid(): 
      print" hellos" 
      save_reservation_photo(request.FILES["photo"]) 
      photo = form.save(commit=False) 
      photo.photographer = request.user 
      photo.save() 
      return HttpResponseRedirect('/photo/%d/' % photo.id ) 
  else: 
    form = PhotoForm() 
 
  data = {'form':form,'reservations':meals, 
    'add':True 
  } 
 
  return render_to_response(template_name, 
                            data, 
                            context_instance=RequestContext(request)) 

表格:

class PhotoForm(forms.ModelForm): 
  class Meta: 
    model = Photo 
    fields = ('reservation','photo','message') 
 
  def __init__(self, *args, **kwargs): 
      super(PhotoForm, self).__init__(*args, **kwargs) 

模型:

class Photo(models.Model): 
 
  photographer = models.ForeignKey(User) 
  pub_date = models.DateTimeField(default=datetime.now,auto_now_add=True,db_index=True) 
  reservation = models.ForeignKey(Reservation) 
 
  message = models.CharField(default='',max_length=140) 
 
  photo = models.ImageField(default='',upload_to="reservation_images/") 

回溯

Traceback: 
Environment: 
 
Request Method: POST 
Request URL: http://127.0.0.1:8000/photo/new/ 
Django Version: 1.2.3 
Python Version: 2.7.0 
Installed Applications: 
['django.contrib.auth', 
 'django.contrib.contenttypes', 
 'django.contrib.sessions', 
 'django.contrib.sites', 
 'django.contrib.messages', 
 'django.contrib.comments', 
 'django.contrib.markup', 
 'django.contrib.sitemaps', 
 'lib.debug_toolbar', 
 'src', 
 'django.contrib.admin'] 
Installed Middleware: 
('django.middleware.common.CommonMiddleware', 
 'django.contrib.sessions.middleware.SessionMiddleware', 
 'django.middleware.csrf.CsrfViewMiddleware', 
 'django.contrib.auth.middleware.AuthenticationMiddleware', 
 'django.contrib.messages.middleware.MessageMiddleware', 
 'lib.debug_toolbar.middleware.DebugToolbarMiddleware') 
 
 
Traceback: 
 
Environment: 
 
Request Method: POST 
Request URL: http://127.0.0.1:8000/photo/new/ 
Django Version: 1.2.3 
Python Version: 2.7.0 
Installed Applications: 
['django.contrib.auth', 
 'django.contrib.contenttypes', 
 'django.contrib.sessions', 
 'django.contrib.sites', 
 'django.contrib.messages', 
 'django.contrib.comments', 
 'django.contrib.markup', 
 'django.contrib.sitemaps', 
 'lib.debug_toolbar', 
 'src', 
 'django.contrib.admin'] 
Installed Middleware: 
('django.middleware.common.CommonMiddleware', 
 'django.contrib.sessions.middleware.SessionMiddleware', 
 'django.middleware.csrf.CsrfViewMiddleware', 
 'django.contrib.auth.middleware.AuthenticationMiddleware', 
 'django.contrib.messages.middleware.MessageMiddleware', 
 'lib.debug_toolbar.middleware.DebugToolbarMiddleware') 
 
 
Traceback: 
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
  100.                     response = callback(request, *callback_args, **callback_kwargs) 
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/contrib/auth/decorators.py" in _wrapped_view 
  25.                 return view_func(request, *args, **kwargs) 
File "/Users/emilepetrone/Sites/meal/../meal/src/views.py" in new_photo 
  532.     print form.reservation 
 
Exception Type: AttributeError at /photo/new/ 
Exception Value: 'PhotoForm' object has no attribute 'reservation' 

请您参考如下方法:

不应该是表格(带有图像或文件字段)be initialized with request.FILES ?

form = PhotoForm(request.POST, request.FILES)