您好我正在使用Django,我正在尝试建立一个小系统来注册人员和团队。
到目前为止,我可以在管理网站中创建团队和人员。
现在,我想制作一个公开表格,即培训师可以注册他的团队。
团队有 Bundesland (州)的外键。
我想要一个下拉列表,显示我已在管理站点中创建的状态。然后在表单中选择它。我的" python速成课程" -book没有涵盖这个,所以请帮助我。到目前为止,我在文档和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)
答案 0 :(得分:0)
所以我可以在你的代码中找出一些问题。
bdl = forms.ModelChoiceField(queryset='bdl_lang.objects.all()), empty_label=None)
- 您在等号后面不需要起始引号。 bdl_lang
是CharField
,因此bdl_lang.objects.all()
没有意义。查询集是Django对象的顺序字典(通过模型类定义)。将其替换为bdl.objects.all()
。在此处,在您的班级__unicode__(self)
中插入Bundesland
方法。此方法应在您的选择中返回您想要的名称。从查看代码开始,您似乎想要返回bdl_lang
。bdl
。我希望这有帮助!