2
Hier ist meine Modelle und Formular in Django Postgres Datenbank.Wenn ich versuche, das Mapspot-Objekt zu erstellen, erhalte ich einen Fehler "Wählen Sie eine gültige Wahl", obwohl es nur ein relationales Objekt.Wählen Sie eine gültige Auswahl..Diese Auswahl ist keine der verfügbaren Optionen
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.']}
Wenn Sie ein Wörterbuch (in der Regel ein QueryDict) passieren, nimmt die Form eine Form der Daten der Form serialisiert wird. In Ihrem Fall erwartet es die ID eines Modells, nicht das Modell. Versuchen Sie 'Map.objects.get (id = 2) .pk' oder noch einfachere '' map ': 2'. Es ist ziemlich klar, wenn Sie denken, dass die Daten des Formulars normalerweise über eine HTTP-Anfrage über das Netzwerk kommen, wo Objekte nicht ohne Serialisierung gehen können. – dhke