【问题标题】:Viewing ForiegnKey data in Django在 Django 中查看外键数据
【发布时间】:2018-10-16 13:16:51
【问题描述】:

我想在 Django 中创建一个显示外键数据的视图。

我有一些在特定日期有空的理发师,我想查看理发师在哪些日期有空。稍后我需要知道哪些理发师在哪些日期有空。

models.py

from django.db import models
from datetime import time

class Barber(models.Model):

    BARBERS = (
        ('KK', 'Kim Kardashian'),
        ('CJ', 'Caitlin Jenner'),
        ('KW', 'Kanye West')
    )

    LOCATION = (
        ('CL', 'Central Detroit'),
        ('NL', 'North Detroit'),
        ('SL', 'South Detroit'),
        ('EL', 'East Detroit'),
        ('WL', 'West Detroit'),
    )

    name = models.CharField(max_length=2, choices=BARBERS)
    location = models.CharField(max_length=2, choices=LOCATION)

    def __str__(self):
        return self.name

class Date(models.Model):

    date = models.DateField()
    name = models.ForeignKey(Barber, on_delete=models.CASCADE)

我的应用中的urls.py

from django.urls import path
from .views import schedule, appointments

urlpatterns = [
    path('', schedule, name='schedule'),
    path('/appointments/<int:id>/', appointments, name='appointments')

views.py

from django.shortcuts import render, redirect
from .models import Barber, Date

def schedule(request):
    barber = Barber.objects.all()
    return render(request, 'schedule.html', {'barber': barber})

def appointments(request, name):
    dates = Date.objects.filter(name=name)
    return render(request, 'appointments.html', {'date': dates})

appointments.html

<h1>Appointments</h1>

<ul>
  {% for date in dates %}
    <li> {{ date.name }} {{ date.dates }} </li>
  {% endfor %}
</ul>

schedule.html:

<h1>Schedule</h1>

<ul>
  {% for barb in barber %}
    <a href="{% url 'appointments' Barber.id %}">
    <li> {{ barb.name }} {{ barb.location }} </li>
  {% endfor %}
</ul>

我得到的错误是:

Reverse for 'appointments' with arguments '('',)' not found. 1 pattern(s) tried: ['\\/appointments\\/(?P<id>[0-9]+)\\/$']

【问题讨论】:

  • 该错误是由url模板标签引起的。你能检查你的模板中是否有{% url 'appointments' %}吗?您需要在 url 标记中传递一个 id 以进行约会。
  • 在模板的某个地方,您错过了id
  • 我在一个单独的 html 模板中传递 ,该模板应该链接到约会.html
  • 然后您需要显示该模板以及呈现它的视图。只显示不相关的代码是没有意义的。
  • 这个{% url 'appointments' Barber.id %} 应该是{% url 'appointments' barb.id %}.. 但是你仍然会在你的视图中遇到另一个问题appointments(request,name)

标签: python django django-models foreign-keys


【解决方案1】:

也许你的代码应该是:

{% for barb in barber %}
    <a href="{% url 'appointments' bard.id %}">
    <li> {{ barb.name }} {{ barb.location }} </li>
{% endfor %}

观看次数

def appointments(request, id):
    barb = Barber.objects.get(id=id)
    dates = barb.date_set.all()
    return render(request, 'appointments.html', {'dates': dates})

【讨论】:

  • 虽然我无法想象 OP 不需要专门用于该理发师约会的页面上的实际理发师对象;最好将其发送到上下文并在模板本身中执行date_set.all
  • 这使链接有效,但我在约会页面上没有看到任何日期?
  • 我的错误:最后一行的上下文应该是{'dates':dates}.. dates
  • @DanielRoseman 你是对的,但我想根据他的代码清楚地解释逻辑
猜你喜欢
  • 1970-01-01
  • 2015-03-25
  • 2020-09-19
  • 1970-01-01
  • 1970-01-01
  • 2014-06-17
  • 1970-01-01
  • 2011-02-01
  • 2018-09-01
相关资源
最近更新 更多