Просмотр данных ForiegnKey в Django - PullRequest
0 голосов
/ 06 мая 2018

Я хочу создать представление, которое отображает данные из внешнего ключа в 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]+)\\/$']

1 Ответ

0 голосов
/ 06 мая 2018

Может быть, ваш код должен быть:

{% 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})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...