在Django中将FK显示为正确的选择字段

时间:2013-05-01 20:51:32

标签: django django-models django-forms django-templates django-views

我有两个Django模型:

from django.db import models


class Show(models.Model):
    show_title = models.CharField(max_length=250)

    def __unicode__(self):
        return self.show_title


class ShowDates(models.Model):
    show_date = models.DateTimeField(default=datetime.now)
    show = models.ForeignKey(Show)

    def __unicode__(self):
        return str(self.show_date)

我在admin.py中添加了一些Shows以及与该节目相关的一些日期。

from django.contrib import admin

from .models import Show, ShowDates


class ShowDatesInline(admin.StackedInline):
    model = ShowDates
    extra = 0


class ShowAdmin(admin.ModelAdmin):
    list_display = ('show_title',)
    inlines = [ShowDatesInline]
admin.site.register(Show, ShowAdmin)

这对于参加演出及其各自的日期非常有用。我很困惑如何将日期显示为与节目相关的表单选择字段。我目前在views.py中有以下内容

from django.shortcuts import render
from django.core import urlresolvers

from .models import Show
from .forms import ShowDatesForm


def index(request, template):
    shows = Show.objects.all()
    return render(request, template, {
        'shows': shows,
    })

以下是使用此代码的模板:

<table class='table'>
        <thead>
            <tr>
                <th>Show Title</th>
                <th>Show Date(s)</th>
            </tr>
        </thead>
        <tbody>
            {% for show in shows %}
                <tr>
                    <td>{{ show.show_title }}</td>
                    <td>
                        <form action="." method="post">
                            {% csrf_token %}
                            <select name="attributes" class="required" required>
                                <option value="">---- Please Select ----</option>
                                {% for show_date in show.showdates_set.all %}
                                    <option value="{{ show_date.show_date }}">
                                        {{ show_date.show_date }}
                                    </option>
                                {% endfor %}
                            </select>
                        </form>
                    </td>
                </td>
            {% endfor %}
        </tbody>
    </table>

我觉得这是错误的做法。有人可以帮忙显示如何显示与正确节目相关的节目日期,这样当用户保存此表单时,正确的节目和showdate会保存吗?

1 个答案:

答案 0 :(得分:0)

如果您使用ModelForm,django将为您处理所有这些。