簡體   English   中英

在Django模板的“ if”語句中調用外鍵關系

[英]Calling a foreign key relationship in an “if” statement in Django template

我有兩個模型,即訂票和確認,它們通過“預訂”通過ForeignKey關系關聯。 我只想在我的詳細信息視圖中顯示屬性值為is_confirmed == True的預訂。 我真的不需要查詢集,如果模板中的確認為True,我只想顯示“預訂”模型中的預訂信息。

models.py:

class Booking(models.Model):
    user = models.ForeignKey(CustomUser, null=True, default='', on_delete=models.CASCADE)
    expert = models.ForeignKey(CustomUser, null=True, default='',on_delete=models.CASCADE, related_name='bookings')
    title = models.CharField(max_length=200, default='Video call with ..', null=True)
    start_time = models.DateTimeField('Start time', null=True)
    end_time = models.DateTimeField('End time', null=True)
    notes = models.TextField('Notes', blank=True, null=True) 

    class Meta:
        verbose_name = 'Booking'
        verbose_name_plural = 'Bookings'

    def get_absolute_url(self):
        return reverse('booking:booking_detail', kwargs={"pk": self.pk})

class Confirmation(models.Model):
    booking = models.ForeignKey(Booking, on_delete=models.CASCADE)
    expert_confirming = models.ForeignKey(CustomUser, on_delete=models.CASCADE)
    is_confirmed = models.BooleanField(default=False)

    def get_absolute_url(self):
        return reverse('booking:booking_detail', kwargs={"pk": self.booking_id})

views.py:

class BookingDetailView(DetailView):
    model = Booking
    template = 'templates/booking_detail.html'

booking_detail.html:

<div class="container" id="booking_content">
    <p>{{ booking.title }}</p>
    <p>{{ booking.start_time }}</p>
    <p>Booking request by: {{ booking.user }}</p>
    <p>Expert requested: {{ booking.expert }}</p></div>

我不確定模板中的if語句如何引用這些相關模型來顯示我想要的內容。

我認為,使用模型的方式必須在Confirmation模型上運行查詢,以確定是否存在針對特定預訂的確認。 但是,為什么要有一個單獨的確認模型呢? 嘗試僅將相關字段移到預訂模型中:

class Booking(models.Model):
    user = models.ForeignKey(CustomUser, null=True, default='', on_delete=models.CASCADE)
    expert = models.ForeignKey(CustomUser, null=True, default='',on_delete=models.CASCADE, related_name='bookings')
    title = models.CharField(max_length=200, default='Video call with ..', null=True)
    start_time = models.DateTimeField('Start time', null=True)
    end_time = models.DateTimeField('End time', null=True)
    notes = models.TextField('Notes', blank=True, null=True)
    is_confirmed = models.BooleanField(default=False) # just this field since you already have an expert.

這簡化了事情,並減輕了數據庫的負載。 然后,您可以僅顯示使用以下模板語言確認的預訂:

{% if booking.is_confirmed %}

    <div class="container" id="booking_content">
        <p>{{ booking.title }}</p>
        <p>{{ booking.start_time }}</p>
        <p>Booking request by: {{ booking.user }}</p>
        <p>Expert requested: {{ booking.expert }}</p>
    </div>

{% else %}
    ...
{% endif %}

您可能有充分的理由使用單獨的確認模型。 如果是這樣,那么這個答案是無關緊要的。 如果沒有,那么也許可以幫助您簡化事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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