[英]Can't display foreign key related object in Django DetailView
我有一个与客户和理发师模型相关的预订 class。 我可以使用详细视图显示所有预订,但是,无法弄清楚如何显示特定理发师的预订。 基本上,我想根据给 url 的 ID 获得理发师的一个或多个预订。
这是我的 model:
customer_id = models.ForeignKey(User, on_delete = models.CASCADE,)
barber_id = models.ForeignKey(Barber, on_delete = models.CASCADE)
timeslot = models.DateTimeField('appointment')
def __str__(self):
return f"{self.customer_id} {self.barber_id} {self.timeslot}"
def get_absolute_url(self):
return reverse("model_detail", kwargs={"pk": self.pk})
我的看法:
class GetBarberBooking(DetailView):
model = Booking
template_name = "barber_booking.html"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['barber'] = Booking.objects.filter(
id=self.kwargs.get('<str:pk'))
return context
我的 url 路径:
path('barber-booking/<str:pk>/', views.GetBarberBooking.as_view(), name='barber-booking'),
您可以删除这段代码:
context['barber'] = Booking.objects.filter(
id=self.kwargs.get('<str:pk'))
在模板中只需使用:
{{ object.barber_id }}
并显示理发师的所有预订:
{{ object.barber_id.booking_set.all }}
它将显示所有的理发师。 这是有效的,因为预订和理发师 model 之间的 FK 关系。更多信息可以在Django 文档中找到。 对于反向关系(多对一),请查看此文档。
仅供参考,您不需要使用_id
创建字段名称后缀,因为 Django 会自动为您创建。
另外,如果你想查询一个理发师,那么你应该在 DetailView 中使用 Barber 作为 model。 然后你可以使用上面提到的类似查询:
# view
class GetBarberBooking(DetailView):
model = Barber
# template
{{ object.booking_set.all }}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.