0

ペットショップアプリをやっています。

アプリはすべてのペット ショップを表示し、ペット ショップをクリックすると、そのペットが表示されます。

ここに画像の説明を入力

ユーザーが問題なくストアを追加できるフォームを作成しました.:D

問題はここにあります。ペットの所有者がペットをストアに追加するためのフォームを作成するとき。このエラーが発生します。

管理ページを使用する代わりに、ユーザーがペットを作成してストアに追加できるようにしようとしています。

Cannot assign "[<Store: John Pet Store>]": "Pet.owner" must be a "Store" instance.
Traceback Switch to copy-and-paste view
C:\djcode\mysite\pet\views.py in fan
if form.is_valid():

私のモデル.py

from django.db import models

class Store(models.Model):
    name = models.CharField(max_length = 20)
    number = models.BigIntegerField()
    address =models.CharField(max_length = 20)
    def __unicode__(self):
    return self.name

class Pet(models.Model):
    animal = models.CharField(max_length =20)
    description = models.TextField()
    owner = models.ForeignKey(Store)
    image = models.FileField(upload_to="images/")

    def __unicode__(self):
        return self.animal

私のforms.py

from django import forms
from pet.models import Store
from pet.models import Pet
class StoreForm(forms.ModelForm):
    name = forms.CharField(max_length =20,widget =forms.Textarea)
    number = forms.CharField(max_length =20,widget =forms.Textarea)
    address = forms.CharField(max_length = 20,widget = forms.Textarea)

    class Meta: 
        model = Store
        fields = ('name','number','address')

class PetForm(forms.ModelForm):
    animal =forms.CharField(max_length = 20,widget = forms.Textarea)
    description =forms.CharField(max_length =20, widget = forms.Textarea)
    owner = forms.ModelMultipleChoiceField(queryset=Store.objects.all())
    image = forms.FileField()

    class Meta:
        model = Pet
        fields = ('animal','description','owner','image')

私のviews.py

 from pet.models import Store , Pet
 from django.shortcuts import render_to_response ,get_object_or_404
 from pet.forms import StoreForm
 from django.template import RequestContext
 from django.core.urlresolvers import reverse
 from django.http import HttpResponseRedirect
 from pet.forms import PetForm

 def index(request):
    store = Store.objects.all()
    return render_to_response ('store.html',{'store':store})

 def brazil(request , animal_id):
     pets = Pet.objects.filter(owner_id=animal_id)
     return render_to_response ('animal.html',{'pets':pets})

 def create(request):
     form = StoreForm(request.POST or None)
     if form.is_valid():
         store = form.save(commit=False)
         store.save()
         if 'dog' in request.POST:
             dog = request.POST['next']
         else:
             dog = reverse('world:index')
         return HttpResponseRedirect(dog)
     return render_to_response(
         'creates.html',
         {'form':form},
         context_instance = RequestContext(request)
 )

 def fan(request):
     form = PetForm(request.POST or None)
     if form.is_valid():
         dad = form.save(commit=False)
         dad.save()
         if 'cat' in request.POST:
             cat = request.POST['next']
         else:
             cat = reverse('world:index')
         return HttpResponseRedirect(cat)
     return render_to_response(
         'fan.html',
         {'form':form},
         context_instance = RequestContext(request)
 )     

私のファン.html

 <form method="POST" "action">{% csrf_token %}
    <ul>
        {{ form.as_ul }}
    </ul>
    <input type = "submit" value= "Add Pets to Store" />
 </form>
4

2 に答える 2

2
class StoreForm(forms.ModelForm):
    class Meta: 
        model = Store

class PetForm(forms.ModelForm):
    class Meta:
        model = Pet

    def __init__(self, *args, **kwargs):
        super(PetForm, self).__init__(*args, **kwargs)
        self.fields['owner'].queryset = Store.objects.all()


def create(request):
     if request.method == 'POST':
         form = StoreForm(request.POST)
         if form.is_valid():
             form.save()

             if 'dog' in request.POST:
                 dog = request.POST['next']
             else:
                 dog = reverse('world:index')

             return HttpResponseRedirect(dog)
     return render_to_response(
         'creates.html',
         {'form':StoreForm()},
         context_instance = RequestContext(request)
 )

 def fan(request):
     form = PetForm()
     if request.method == 'POST':
         form = PetForm(request.POST)
         if form.is_valid():
             form.save()

             if 'cat' in request.POST:
                 cat = request.POST['next']
             else:
                 cat = reverse('world:index')

             return HttpResponseRedirect(cat)
     return render_to_response(
         'fan.html',
         {'form':form},
         context_instance = RequestContext(request)
 )     
于 2013-03-03T15:17:16.963 に答える
1

問題はここにあります:

Cannot assign "[<Store: John Pet Store>]": "Pet.owner" must be a "Store" instance.

[<Store: John Pet Store>]オブジェクトStoreを含む配列Storeです(あなたの場合は1つだけです)。

ペットのフォームには、所有者用に次の行があります。

owner = forms.ModelMultipleChoiceField(queryset=Store.objects.all())

ただし、所有者を複数選択フィールドにしたくない場合は、所有者の配列が戻ってきます (現在何が起こっているのか)。

次のように変更する必要があります。

owner = forms.ModelChoiceField(queryset=Store.objects.all())

コメントから編集

class PetForm(forms.ModelForm):
    class Meta:
        model = Pet
        fields = ('animal','description','owner','image')` 
于 2013-03-03T15:29:45.367 に答える