簡體   English   中英

無法在Django DetailView中顯示外鍵相關的object

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM