簡體   English   中英

如何在由外鍵連接的不同表的模板 django 中打印數據?

[英]How to print data in template django of a diffrent table joined by foreign key?

大家好,我有兩個模型第一個如下:

class Item(models.Model):
    title = models.CharField(max_length=100)
    price = models.FloatField()
    bargainprice = models.FloatField(default=0)
    discount_price = models.FloatField(blank=True, null=True)
    category = models.CharField(choices=CATEGORY_CHOICES, max_length=2)
    label = models.CharField(choices=LABEL_CHOICES, max_length=1)
    slug = models.SlugField()
    description = models.TextField()
    image = models.ImageField()

我使用以下視圖獲取此模型數據:

class ItemDetailView(DetailView):
    model = Item
    template_name = "product.html"

在 product.html 中,我正在訪問這樣的 Item 對象:

    <span class="mr-1">
          <del>₹ {{ object.price }}</del>
        </span>
        <span>₹ {{ object.discount_price }}</span>

        {% else %}
        <span> ₹ <span id="pp">{{ object.price }}</span></span>

等等..

這里一切正常。 但是當我創建以下模型時出現問題:

class BargainModel(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL,
                         on_delete=models.CASCADE)
    itemId = models.IntegerField()
    bprice = models.FloatField()

如前所述,我用外鍵加入了這個。 **我想要做的是在同一用戶的 product.html 中打印“ bprice ”,但我無法做到 ** 任何人都可以幫我解決這個問題,我是 Django 的新手。 提前致謝

在這種情況下,您需要像這樣導入 User

from django.contrib.auth.models import User

class BargainModel(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    itemId = models.ForeignKey(Item, on_delete=models.CASCADE)
    bprice = models.FloatField()

在 product.html 中,您可以調用 BargainModel 的模型,它也包含帶有用戶的 Item

這是更好地工作,一個ForeignKey ,因為這將保證引用完整性。 你這樣shoudl定義BargainModel為:

from django.conf import settings

class Bargain(models.Model):
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE
    )
    item = models.ForeignKey(
        Item,
        on_delete=models.CASCADE
    )
    bprice = models.FloatField()
    
    class Meta:
        constraints = [
            models.UniqueConstraint(fields=['item', 'user'], name='unique_user_item')
        ]

DetailView ,我們可以查看是否有給定項目和用戶的Bargain記錄:

class ItemDetailView(DetailView):
    model = Item
    template_name = "product.html"

    def get_bargain(self):
        if self.request.user.is_authenticated():
            return Bargain.objects.filter(item=self.object, user=request.user).first()

然后你可以用:

{{ view.get_bargain.bprice }}

如果有相關的Bargain ,則會顯示相應的bprice


注意:型號通常沒有Model后綴。 因此,最好將BargainModel重命名為Bargain

暫無
暫無

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

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