Ich habe ein Modell mit dem Namen Space
und es hat ein Feld mit dem Namen guest
, und das Feld ist ein Choicefield, das eine einzelne Zahl nimmt, sagen wir 3
und speichern Sie es in der Datenbank. Ich habe ein anderes Modell Book
und unter seinen Feldern ist no_of_persons
.Schalten Sie ForeignKey-Objekte zu ChoicesField
Nun ist es mir möglich, die 'guest'
Feldwert zu filtern, die '3'
durch Book
Modell ist und es als Drop-Down (1,2,3) zeigen, dass die Zahl nicht in guest
Modell gespeichert überschreiten wird.?
Recall, guest
wird als einstellige gespeichert. Ist es möglich, dass es ab der niedrigsten Nummer wie ein Dropdown angezeigt wird?
Ein gutes Beispiel dafür, was ich versuche zu tun, wie der Wert des Feldes ‚Gäste‘ auf Airbnb mit ‚Gästen‘ Feld in seinem ‚Buch‘ Modell entspricht.
UPDATE:
gibt es die folgenden Fehler nach dem Vorschlag von Todor versuchen.
coercing to Unicode: need string or buffer, int found
Modelle
class Space(models.Model):
user= models.ForeignKey(User)
no_of_guest=models.CharField(max_length=30, choices=MAX_SPACE_CHOICES, verbose_name='no_of_guest')
#other fields
def __unicode__(self):
return '%s, %s, %s, %s, %s' % (self.user, self.id, self.name, self.address, self.no_of_guest)
class BookSpace(models.Model):
user= models.ForeignKey(User)
space= models.ForeignKey(Space)
check_in_date= models.DateField()
check_out_date= models.DateField()
no_of_persons= models.CharField(max_length=10)
#other fields
def __unicode__(self):
return '%s, %s, %s' % (self.user, self.space, self.full_name)
class BookSpaceForm(forms.ModelForm):
class Meta:
model= BookSpace
exclude=('#fields not needed')
def __init__(self, *args, **kwargs):
space= kwargs.pop('space')
super(BookSpaceForm, self).__init__(*args, **kwargs)
guest_choices= [(i, str(i)) for i in range(1, int(space.no_of_guest)+1)]
self.fields['no_of_persons'].widget= forms.ChoiceField(choices=guest_choices)
Nach der Aktualisierung, ich bin
KeyError u'space‘ Ausnahme Location bekommen: models.py in init, Linie 202
Die Zeile lautet:
space= kwargs.pop('space')
In meinen Ansichten:
def book_a_space(request, space_id):
space= Space.objects.get(pk=space_id)
if request.method=="POST":
form=BookSpaceForm(request.POST)
if form.is_valid():
#other data and more
else:
print form.errors
else:
form=BookSpaceForm(space=space)
return render(request, 'spaceb/book_space_form.html', {'BookSpaceForm':BookSpaceForm})
In Vorlage:
{{ BookSpaceForm.as_p }}
UPDATE:
noch die KeyError bekommen. Ich änderte die Modelle wie folgt aus:
def __init__(self, *args, **kwargs):
space_id= kwargs.pop('space_id')
super(BookSpaceForm, self).__init__(*args, **kwargs)
if space_id:
guest_choices = [(str(i), str(i)) for i in range(1, int(space_id.no_of_guest)+1)]
self.fields['no_of_persons'].widget = forms.ChoiceField(choices=guest_choices)
Und in meinen Ansichten, ich habe
def book_a_space(request, space_id):
space= Space.objects.get(pk=space_id)
if request.method=="POST":
form=BookSpaceForm(request.POST)
if form.is_valid():
#other data and more
else:
print form.errors
else:
context = {
'BookSpaceForm': BookSpaceForm(space_id=space_id),
'space_id': Space.objects.get(id=space_id)
}
return render(request, 'spaceb/book_space_form.html', context)
Und ich bin immer diese Fehlermeldung:
'unicode' object has no attribute 'no_of_guest'
Ich habe die Unicode in BookSpace Modelle zurück:
return '%s, %s, %s' % (self.user, self.space_id.no_of_guest, self.full_name)
Noch .. immer noch die gleichen Unicode-Fehler.
Danke für die Antwort. Das Hauptproblem besteht darin, das 3 in Dropdown wie (1,2,3) zu ändern. Ich finde es, um herauszufinden, wie es geht. – YoYo
@YoYo Ich habe meine Antwort mit einem Beispielbeispiel aktualisiert, hoffe es hilft. – Todor
Ich bekomme diesen Fehler: Coercing nach Unicode: brauche Zeichenfolge oder Puffer, Int in dieser Zeile gefunden guest_choices = [(i, str (i)) für i in Bereich (1, space.guest + 1)] Ich habe versucht guest_choices = [(i, int (str (i))) für i im Bereich (1, sharedcrib.no_of_guest + 1)] noch immer der gleiche Fehler – YoYo