【问题标题】:Displaying FK's in Django forms as a select field properly将 Django 表单中的 FK 正确显示为选择字段
【发布时间】:2013-05-01 20:51:31
【问题描述】:

我有两个 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>

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2020-07-09
      • 1970-01-01
      • 1970-01-01
      • 2012-11-01
      • 2013-07-28
      • 1970-01-01
      • 2016-10-13
      • 2017-02-06
      • 2021-09-29
      相关资源
      最近更新 更多