检查多对多存在的Django对象是否仅显示对象

时间:2016-04-04 23:19:31

标签: django django-models django-templates django-views

我有一个工具列表,其中添加了一个部件作为捆绑包。捆绑包被列为多对多字段中的一部分,因此我需要迭代这些部分以查看是否存在正在显示的工具的附加产品。如果零件存在,那么我想只显示零件本身。我尝试使用下面的代码进行解决,它确实检查它是否存在,但打印出查询集。我理解.all()是导致这种情况的原因,但我无法弄清楚如何检查然后只显示单个部分。谢谢你的帮助。

{% for p in tool.parts.all %}
  {% if 'bp-01' %}
    <h3>Bundle Included:</h3>
    {{ p.model_number }}
    ...
  {% endif %}
{% endfor %}

零件模型

class Part(Timestamp):
    model_number = models.ForeignKey(ModelNumber)
    price = models.SmallIntegerField()
    title = models.CharField(max_length=250)
    slug = models.SlugField(help_text="slug-title-should-be-like-this")
    description = RichTextField()
    type = models.ForeignKey(Type, blank=True)
    category = models.ForeignKey(Category)

工具模型

class Tool(Timestamp):
    model_number = models.ForeignKey(ModelNumber)
    price = models.SmallIntegerField()
    title = models.CharField(max_length=250)
    slug = models.SlugField(help_text="slug-title-should-be-like-this")
    description = RichTextField()
    type = models.ForeignKey(Type)
    category = models.ForeignKey(Category)
    parts = models.ManyToManyField(Part, blank=True, related_name="parts")

型号型号

class ModelNumber(models.Model):
    slug = models.SlugField(max_length=100, unique=True, help_text="slug-title-should-be-like-this")

    class Meta:
        verbose_name = 'Model Number'
        verbose_name_plural = 'Model Numbers'

    def __str__(self):
        return self.slug

2 个答案:

答案 0 :(得分:1)

如果您在./while.sh: 5: ./while.sh: Syntax error: "done" unexpected 上只有slug字段,则可以使用ModelNumber来检查条件:

{% if p.model_number.slug== 'bp-01' %}

答案 1 :(得分:0)

根据ModelNumber模型的外观,您可以将值与以下内容进行比较:

{% for p in tool.parts.all %}
  {% if p.model_number.number == 'bp-01' %}
    <h3>Bundle Included:</h3>
    {{ p.model_number }}
    ...
  {% endif %}
{% endfor %}

这假设ModelNumber看起来像这样:

class ModelNumber(models.Model):
    number = models.CharField(max_length=20)
    ....

    def __str__(self):
        return self.number