0

ユーザーがプロファイルを作成してペットの写真をアップロードできるようにする新しい機能を既存のアプリに追加しようとしています。

ユーザーがログインすると、自分の名前を表示するプロファイルにリダイレクトされ、プロファイル ページに表示されるモデルに自分の写真を追加することもできます。

ここに画像の説明を入力

現時点では、テンプレートに名前を取得することはできますが、ユーザーの名前とアップロード画像を同時に表示することはできないようです。

Add picture をクリックするたびに、ユーザーが写真をアップロードできず、代わりにこのエラーが発生します

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

ユーザーが写真をアップロードできるようにページを設計できますが、同時に名前は表示されません。

問題は私の profile.html と views.py の Profile 関数にあると思います

私のviews.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))

私のforms.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>

私のモデル.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
4

4 に答える 4

3

PictureFormから継承する必要があります。forms.ModelFormではありませんforms.Form

于 2013-03-08T11:36:25.737 に答える
2

form.save(commit=False) を消去します。save メソッドをオーバーライドする場合にのみ、これを行います

@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
于 2013-03-08T11:29:13.443 に答える
2

タイプミスがあります。である必要がありますrequest.FILES

于 2013-03-08T11:23:29.190 に答える
0

バディはいない。あなたの問題はあなたのmodel.pyにあります:

この関数をモデルに追加するだけです

def save(self,*args, **kw):
super(PictureForm,self).save(*args, **kw)
于 2013-03-22T06:22:45.620 に答える