簡體   English   中英

Django:如何使用Foreignkey制作表單

[英]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)

因此,我可以在您的代碼中找出許多問題。

  1. bdl = forms.ModelChoiceField(queryset='bdl_lang.objects.all()), empty_label=None) -您不需要等號后的引號。
  2. bdl_lang是一個CharField所以bdl_lang.objects.all()沒有任何意義。 queryset是Django對象的命令字典(通過模型類定義)。 將其替換為bdl.objects.all() 從這里,在類Bundesland插入__unicode__(self)方法。 此方法應返回您想要的名稱。 通過查看您的代碼,您似乎想要返回bdl_lang
  3. 您需要在字段選項中包含bdl

我希望這有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM