Python 选择有效选项。该选项不是可用选项之一

Python 选择有效选项。该选项不是可用选项之一,python,django,postgresql,Python,Django,Postgresql,这是我在Django postgres数据库中的模型和表单。当我尝试创建mapspot对象时,我得到一个错误“选择一个有效的选项”,即使它只是一个关系对象 models.py from django.db import models from django.utils.translation import ugettext_lazy as _ from django.contrib.postgres.fields import ArrayField class Map(models.Model

这是我在Django postgres数据库中的模型和表单。当我尝试创建mapspot对象时,我得到一个错误“选择一个有效的选项”,即使它只是一个关系对象

models.py

from django.db import models
from django.utils.translation import ugettext_lazy as _
from django.contrib.postgres.fields import ArrayField

class Map(models.Model):
    name = models.CharField(max_length=128)


class MapSpot(models.Model):
    map = models.ForeignKey('polls.Map', related_name='polls')
    position = ArrayField(models.IntegerField(), size=2)
    position1 = models.IntegerField(default=0)

    class Meta:
        unique_together = (('map', 'position'))
forms.py

from django.forms import ModelForm
from .models import Map, MapSpot

class MapForm(ModelForm):
    class Meta:
        model = Map
        fields = ['name']

class MapSpotForm(ModelForm):
    class Meta:
        model = MapSpot
        fields = ['map','position']     


>>> form = MapForm({'name':'US'})
>>> form.is_valid()
True
>>> form.save()
<Map: Map object>
>>> for each in Map.objects.all():
...     print(each.id, each.name)
... 
1 Germantown
2 US
>>> spotform =MapSpotForm({'map':Map.objects.get(id=2),'position':'10,20'})
>>> spotform.is_valid()
False
>>> spotform.errors
{'map': ['Select a valid choice. That choice is not one of the available choices.']}
从django.forms导入ModelForm
从.models导入地图,MapSpot
类映射形式(模型形式):
类元:
模型=地图
字段=['name']
类MapSpotForm(ModelForm):
类元:
模型=地图点
字段=['map','position']
>>>form=MapForm({'name':'US'})
>>>form.u是否有效()
真的
>>>form.save()
>>>对于Map.objects.all()中的每个:
...     打印(每个.id,每个.name)
... 
1日尔曼镇
2美国
>>>spotform=mapsotform({'map':map.objects.get(id=2),'position':'10,20'})
>>>spotform.u有效吗()
假的
>>>spotform.errors
{'map':['选择一个有效的选项。该选项不是可用的选项之一。]}

外键的默认表单字段是
modelcoocefield
ModelChoiceField
“验证查询集中是否存在给定id”。请尝试下一步:

spotform = MapSpotForm({'map': Map.objects.get(id=2).id, 'position': '10,20'})
如果您传递一个字典(通常是查询字典),则表单会假定它已被序列化为表单数据的一种形式。在您的情况下,它需要模型的ID,而不是模型的ID。试试
Map.objects.get(id=2.pk),或者更简单的
“Map”:2
。当您认为表单的数据通常通过HTTP请求通过网络传输时,这一点就非常清楚了,如果没有序列化,对象就无法传输。