首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django无法分配"[<Store: Toby Pet Store>]":

Django无法分配"[<Store: Toby Pet Store>]":
EN

Stack Overflow用户
提问于 2013-03-03 23:05:07
回答 2查看 118关注 0票数 0

我在做一个宠物店的应用。

该应用程序显示了所有的宠物商店,当你点击宠物商店时,你会看到他们的宠物。

我创建了一个表单,允许用户毫无问题地添加.:D商店

现在问题来了。当我为宠物的主人创建一个表单来将他们的宠物添加到他们的商店时。我得到了这个错误。

我正在尝试让用户创建他们的宠物并将其添加到他们的商店中,而不是使用管理页面。

代码语言:javascript
复制
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():

我的models.py

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
 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)
 )     

我的fan.html

代码语言:javascript
复制
 <form method="POST" "action">{% csrf_token %}
    <ul>
        {{ form.as_ul }}
    </ul>
    <input type = "submit" value= "Add Pets to Store" />
 </form>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-03 23:29:45

问题就在这里:

代码语言:javascript
复制
Cannot assign "[<Store: John Pet Store>]": "Pet.owner" must be a "Store" instance.

[<Store: John Pet Store>]不是一个Store,它是一个包含Store对象的数组(在你的例子中只有一个)。

在你的宠物表单中,你有下面这行来表示主人:

代码语言:javascript
复制
owner = forms.ModelMultipleChoiceField(queryset=Store.objects.all())

但是您不希望owner是一个多项选择域,否则一组owner将返回(现在发生了什么)。

您应该将其更改为:

代码语言:javascript
复制
owner = forms.ModelChoiceField(queryset=Store.objects.all())

从注释编辑

代码语言:javascript
复制
class PetForm(forms.ModelForm):
    class Meta:
        model = Pet
        fields = ('animal','description','owner','image')` 
票数 1
EN

Stack Overflow用户

发布于 2013-03-03 23:17:17

代码语言:javascript
复制
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)
 )     
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15187021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档