[英]Django how make a filter of foreignkey based on parent foreignkey selected in other form?
[英]Django: How to make a form with foreignkey
嗨,我正在與Django合作,我正在嘗試建立一個小的系統來注冊人員和團隊。
到目前為止,我可以在管理站點中創建團隊和人員。
現在,我想公開表格,即培訓師可以在其中注冊他的團隊。
球隊有一個ForeignKey到Bundesland(的狀態)。
我想要一個顯示狀態的下拉列表,該狀態已經在管理站點中顯示了。 然后從表格中選擇。 我的“ python崩潰課程”書沒有涵蓋這一點,所以請幫助我。 到目前為止,我在文檔中以及關於stackoverflow上找到的答案對我不起作用。
models.py :
from django.db import models
class Bundesland(models.Model):
bdl_kurz = models.CharField(max_length=2) #abbreviation
bdl_lang = models.CharField(max_length=25) #full name
--snip--
class Team(models.Model):
bdl = models.ForeignKey(Bundesland)
name = models.CharField(max_length=40)
plz = models.CharField(max_length=5)
ort = models.CharField(max_length=40)
strasse = models.CharField(max_length=40)
strnr = models.CharField(max_length=5)
telefon = models.CharField(max_length=20)
email = models.EmailField()
--snip--
forms.py:
from django import forms
from .models import Team
class TeamForm(forms.ModelForm):
class Meta:
model = Team
bdl = forms.ModelChoiceField(queryset='bdl_lang.objects.all()), empty_label=None)
fields = ['name', 'plz', 'ort', 'strasse', 'strnr', 'telefon', 'email']
labels = {'plz': 'PLZ', 'ort': 'Ort', 'strasse': 'Straße', 'strnr': 'Hausnr.', 'telefon': 'Telefon', 'email': 'Email'}
new_team.html:
<p>New Team</p>
<form action="{% url 'teilnehmer:new_team' %}" method='post'>
{% csrf_token %}
{{ form.as_p }}
<button name="submit">Submit data</button>
</form>
views.py :(如果重要)
from django.shortcuts import render
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from .models import Bundesland, Gewichtsklasse, Team, Kaempfer
from .forms import TeamForm
--snip--
def new_team(request):
"""Add a new team."""
if request.method != 'POST':
# No data submitted; create a blank form
form = TeamForm()
else:
# POST data submitted; process data.
form = TeamForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse('teilnehmer:index'))
context = {'form': form}
return render(request, 'teilnehmer/new_team.html', context)
因此,我可以在您的代碼中找出許多問題。
bdl = forms.ModelChoiceField(queryset='bdl_lang.objects.all()), empty_label=None)
-您不需要等號后的引號。 bdl_lang
是一個CharField
所以bdl_lang.objects.all()
沒有任何意義。 queryset是Django對象的命令字典(通過模型類定義)。 將其替換為bdl.objects.all()
。 從這里,在類Bundesland
插入__unicode__(self)
方法。 此方法應返回您想要的名稱。 通過查看您的代碼,您似乎想要返回bdl_lang
。 bdl
。 我希望這有幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.