2
私のモデルとフォームはDjango postgresデータベースです。私がmapspotオブジェクトを作成しようとすると、「有効な選択肢を選択してください。リレーショナルオブジェクトです。有効な選択肢を選択してください。選択肢は選択肢の1つではありません
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.']}
あなたは辞書(通常のQueryDict)を渡すと、フォームは、それがフォームのデータの形式を連載ます前提としています。あなたの場合、モデルではなくモデルのIDが必要です。 'Map.objects.get(id = 2).pk'か、より単純な' 'map ':2'を試してみてください。フォームのデータが、通常、オブジェクトがシリアル化せずに行かないHTTP要求を介してネットワーク経由で来ると考えると、明らかです。 – dhke