Django:AttributeError - Object没有属性 [英] Django: AttributeError - Object has no attribute

查看:144
本文介绍了Django:AttributeError - Object没有属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

此视图抛出AttributeError说:'PhotoForm'对象没有属性'reservation'。会发生什么 - 功能通过,但实际上没有上传图像。在调试中,表单无效



我尝试打印




  • form.reservation

  • form.message

  • form.photo



但是这显示了这个追溯(这是表单无效并且没有完成该功能的原因。



因为我建立了其他功能的工作,我有点困惑,感谢您的帮助!



HTML表单

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

查看

  @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 = {reservation:meals}
如果request.method =='POST':
form.photographer = request.user
form.data.get('reservation')
打印form.reservation
打印form.message
打印form.photo
如果form.is_valid():
打印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_respon se(template_name,
data,
context_instance = RequestContext(request))

表单

  class PhotoForm(forms.ModelForm):
class Meta:
model =照片
fields =('reservation','photo','message')

def __init __(self,* args,** kwargs):
super(PhotoForm,self).__ init __(* args,** kwargs)

 类照片(models.Model):

photographer = models.ForeignKey (用户)
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 /)
/ pre>

追溯

 追溯:
环境:

请求方法:POST
请求URL:http://127.0.0.1:8000/photo/new/
Django版本:1.2.3
Python版本:2.7.0
安装的应用程序:
[' 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']
安装的中间件:
('django.middleware.common.CommonMiddleware',
'django。 contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages。中间件.MessageMiddleware',
'lib.debug_toolbar.middleware.DebugToolbarMiddleware )


追溯:

环境:

请求方法:POST
请求URL:http://127.0。 0.1:8000 / photo / new /
Django版本:1.2.3
Python版本:2.7.0
安装的应用程序:
['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']
安装的中间件:
('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')


追溯:
文件/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)
文件/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages /django/contrib/auth/decorators.pyin _wrapped_view
25. return view_func(request,* args,** kwargs)
文件/Users/emilepetrone/Sites/meal/../meal /src/views.pyin new_photo
532. print form.reservation

异常类型:/ photo / new /
中的AttributeError异常值:'PhotoForm'对象没有属性预留


解决方案

.FILES的形式。

  @login_required 
def new_photo(request,template_name =photo / newphoto.html):

form = PhotoForm(user = request.user,data = request.POST,files = request.FILES)

如果request.method =='POST':
表单。摄影师= request.user
如果form.is_valid():
photo = form.save(commit = False)
photo.photographer = request.user
photo.save()
return HttpResponseRedirect('/ photo /%d /'%photo.id)


This view is throwing the AttributeError saying :'PhotoForm' object has no attribute 'reservation'. What happens- the function passes, but doesn't actually upload the image. In debugging it, the form is not valid.

I tried printing

  • form.reservation
  • form.message
  • form.photo

But that shows this traceback ( which is the reason why the form isn't valid & not completing the function.

As I built this off other functions that are working, I'm a bit confused. Thanks for the help!

The HTML Form

<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>

The 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))

The Form:

class PhotoForm(forms.ModelForm):
  class Meta:
    model = Photo
    fields = ('reservation','photo','message')

  def __init__(self, *args, **kwargs):
      super(PhotoForm, self).__init__(*args, **kwargs)

The Model:

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/")

The traceback

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'

解决方案

The key was having files=request.FILES in the form.

@login_required
def new_photo(request, template_name="photo/newphoto.html"):

  form = PhotoForm( user= request.user, data=request.POST, files=request.FILES)

  if request.method == 'POST':
    form.photographer = request.user
    if form.is_valid():
      photo = form.save(commit=False)
      photo.photographer = request.user
      photo.save()
      return HttpResponseRedirect('/photo/%d/' % photo.id )

这篇关于Django:AttributeError - Object没有属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆