【问题标题】:Loading specific foreign key attribute in Django Template在 Django 模板中加载特定的外键属性
【发布时间】:2021-04-02 14:05:49
【问题描述】:

开发人员,

我有 2 个模型,其中一个具有外键属性作为对另一个的引用。现在我正在尝试在我的模板中查看这两个对象。

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

    def get_context_data(self, **kwargs):
        context = super(ItemDetailView, self).get_context_data(**kwargs)
        context['markets'] = Market.objects.all()
        # And so on for more models
        return context 

在我的模板中,我只想要我的产品的确切市场

我尝试过这样的事情:

      {% for market in markets %}  // or {% for object.market in markets %} 
  
      {% if market.market == object.market %}

     >> Do smth if conditions match << 

      {% endif %}

    {% endfor %}

在循环中,我得到像 x1、x2、x3 和 object.market 这样的字符串,其值为 x1。

所以我只想输出对应市场的对象。 但如果我检查 {% if market.market == object.market %} 条件不知何故不匹配。当我在循环内将它们打印出来时,我得到 x1,x2,x3,... 用于 market.market 和 x1,x1,x1,... 用于 object.market

这些是我的模型:

class Market(models.Model):
    market = models.CharField(max_length=30)
    branch = models.CharField(choices=BRANCH_CHOICES, max_length=1)
    image = models.ImageField(blank=True)
    slug = models.SlugField(blank=True)

    def __str__(self):
        return self.market

    def get_absolute_url(self):
        return reverse("core:market-product-list", kwargs={
        'slug': self.slug
    })

class Item(models.Model):
    title = models.CharField(max_length=100)
    market = models.ForeignKey(Market, related_name='children', on_delete=models.CASCADE, blank=True, null=True)
    price = models.FloatField()
    discount_price = models.FloatField(blank=True, null=True)
    category = models.ForeignKey(ItemCategory, related_name='children', on_delete=models.CASCADE, blank=True, null=True)

    label = models.CharField(choices=LABEL_CHOICES, max_length=1)
    slug = models.SlugField()
    path = models.CharField(default='/market-product-list/', max_length=100)
    description = models.TextField()
    image = models.ImageField()


【问题讨论】:

  • 请提供型号。

标签: html django for-loop templates


【解决方案1】:

我刚刚解决了这个问题。问题是 object.market 被解释为对象而不是字符串。所以不可能检查 if 子句中的条件。我设法通过将对象转换为这样的字符串来输出相应的市场:

起初: {% if object.market|slugify|capfirst == market.market %} 然后将其更改为简单 {% if object.market == market %} 这显然是更好的解决方案

PS:我还了解到这是一个糟糕的编程,我不应该在模板中过滤,但我是 Django 新手,我很高兴现在一切正常:)

【讨论】:

    【解决方案2】:

    只需调用模型中特定市场的字段即可。

     {% for market in markets %}  // or {% for object.market in markets %} 
    
      {% if market.market == object.market %}
    
     {{ market.fieldname }} 
    
      {% endif %}
    
    {% endfor %}
    

    【讨论】:

    • 这对我不起作用,因为 market.market 的输出是 x1, x2 而 object.market 的输出是 x1,x1
    【解决方案3】:

    为什么不遍历 Product(Item) 对象?

    【讨论】:

    • 我在该 DetailView 上只有一项。我的目标是显示参考市场。
    猜你喜欢
    • 2021-03-20
    • 1970-01-01
    • 2011-11-04
    • 2017-06-14
    • 2020-09-29
    • 2018-12-04
    • 1970-01-01
    • 2019-12-02
    相关资源
    最近更新 更多