0
こんにちは私はDjangoで作業しています。私は人とチームを登録するための小さなシステムを作ろうとしています。Django:外部キーでフォームを作成する方法
これまでのところ、私は管理サイトにチームと人を作ることができます。
今、トレーナーが自分のチームを登録できる公開フォームを作りたいと思います。
チームには、ブンデスランド(状態)への外部キーがあります。
管理サイトで既に作成した状態を示すドロップダウンリストが必要です。それからフォームから選んだ。私の "python crash course" -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)
メタでフィールドを定義することはできません。クラスレベルにする必要があります。しかし、 'bdl'を' fields'リストに入れるのはなぜですか? –
本当ですか?私はそれが簡単だと思っていませんでした。このサイトを破棄して申し訳ありません。大変ありがとう! –