【问题标题】:Django 'PictureForm' object has no attribute 'save'Django 'PictureForm' 对象没有属性 'save'
【发布时间】:2013-03-08 11:22:34
【问题描述】:

我正在尝试向我现有的应用程序添加一项新功能,让用户可以创建个人资料并上传他们的宠物照片。

当用户登录时,他会被重定向到显示他的名字的个人资料中,并且他可以将自己的照片添加到模型中,该模型将显示在个人资料页面上。

目前,我可以将名称检索到模板中,但似乎无法同时显示用户名称和上传图片。

每当我点击添加图片时,它不会让用户上传图片而是我收到此错误

'PictureForm' object has no attribute 'save'
 pet = form.save(commit =False) ...

我可以设计页面让用户上传图片但不同时显示名称。

我认为问题在于我的 profile.html 和 view.py 中的 Profile 函数

我的部分观点.py

@login_required     
def Profile(request):
    Person = request.user.get_profile()
    if not request.user.is_authenticated():
        return HttpResponseRedirect('/login/')
    if request.method == "POST":
        form = PictureForm(request.POST ,request.FILE or None)
        if form.is_valid():
            pet = form.save(commit =False)
            pet.save()
    context = (
        {'Person': Person} , 
        {'form':PictureForm()}
        )
    return render_to_response('profile.html', context, context_instance=RequestContext(request))

我的部分表单.py

from django import forms
from django.contrib.auth.models import User
from django.forms import ModelForm
from pet.models import *

class PictureForm(forms.Form):

    class Meta:
        model = Person
        fields = ('image')

我的个人资料.html

 {% if Person %}
 <ul>
        <li>Name : {{Person.name}} </li>
 </ul>
 {% endif %}        

 <form method="POST" enctype="multipart/form-data" "action" >
 {% csrf_token %}
    <ul>
        {{ form.as_ul }}
    </ul>
    <input type = "submit" value= "Add Picture" />
 </form>

我的models.py

from django.db import models
from django.db.models.signals import post_save
from django.contrib.auth.models import User

class Person(models.Model):
    user = models.OneToOneField(User)
    name = models.CharField(max_length=100)
    image = models.FileField(upload_to="images/",blank=True,null=True)


    def __unicode__(self):
        return self.name

class Pet(models.Model):
    Person = models.ForeignKey(Person)
    description = models.CharField(max_length=100)
    image = models.FileField(upload_to="images/",blank=True,null=True)

    def __unicode__(self):
        return self.description

【问题讨论】:

  • PictureForm(request.POST ,request.FILES 或无)

标签: django


【解决方案1】:

PictureForm 需要继承自 forms.ModelForm,而不是 forms.Form

【讨论】:

  • @Daniel Roseman。当我单击添加图片时,此错误意味着为 Person 指定的未知字段(i、a、m、e、g)
  • 表示这个:fields = ('image')应该是这个:fields = ('image',)
  • @Tom Christie 谢谢:]
  • 如果我们使用'form.Form',我们能做什么,因为它是一个简单的上传,没有绑定到模型。那么哪个 PictureBlaBla 变量适合呢?
【解决方案2】:

删除您的 form.save(commit=False)。仅当您覆盖保存方法时,您才会这样做

@login_required     
def Profile(request):
    Person = request.user.get_profile()
    if not request.user.is_authenticated():
        return HttpResponseRedirect('/login/')
    if request.method == "POST":
        form = PictureForm(request.POST ,request.FILES)
        if form.is_valid():
            form.save()
    context = (
        {'Person': Person} , 
        {'form':PictureForm()}
        )
    return render_to_response('profile.html', context, context_instance=RequestContext(request))

更新:

    [.....]
    board = Board.objects.get(board=picture.board)//remove this
    the_id = board.id //remove this

return HttpResponseRedirect(reverse('world:Boat', kwargs={'animal_id': picture.board.id })) // change the_id into picture.board.id

【讨论】:

  • 如果您不忙,请您帮帮我。 .我不明白为什么会这样。问题在页面底部:]
  • 它在问题的底部。上面写着“Cathy Here”
  • 上传图片之前,会重定向到该图片的目标版块。
  • return HttpResponseRedirect(reverse('world:BoardCreator')
  • 好的,当您添加图片时,它们是一个列出所有板的保管箱。我们反向工作以获取 board id 并使用图片过滤 board id。然后我们得到了董事会的照片。
【解决方案3】:

你有一个错字。应该是request.FILES

【讨论】:

  • 感谢您的帮助,但我仍然不允许我添加图片
【解决方案4】:

没有朋友。你的问题出在你的 model.py 中:

只需将此功能添加到您的模型中

def save(self,*args, **kw):
super(PictureForm,self).save(*args, **kw)

【讨论】:

    猜你喜欢
    • 2015-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    • 1970-01-01
    • 1970-01-01
    • 2021-09-16
    相关资源
    最近更新 更多