首页 > 解决方案 > django中的对象比较

问题描述

楷模

class Weapon_Class(models.Model):
    title = models.CharField(max_length = 50)
    description = models.TextField()

    def __str__(self):
        return self.title

class Gun(models.Model):
    weapon_type = models.ForeignKey(Weapon_Class, on_delete = models.CASCADE)
    name = models.CharField(max_length = 50)
    magazine_size = models.IntegerField(default = 0)
    damage = models.IntegerField(default = 0)
    fire_rate = models.IntegerField(default = 0)
    description = models.TextField()


    def __str__(self):
        return self.name 

意见

class Weapon_class_view(ListView):
    model = Weapon_Class
    template_name = 'weapon_class.html'
    # print(Weapon_Class.objects.all()[1].headline)

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['items'] = Weapon_Class.objects.all().count()
        context['weapons'] = list(Weapon_Class.objects.all())
        context['arm'] = (Gun.objects.all())
   
        return context

模板

{% for weapon in weapons %}
    <div class = "wepbox" >
        <a href="#"><div class = "boxy">{{ weapon.title }}</div></a>
    </div>
    {% for g in arm %}
        {% if g.weapon_type == weapon.title %}
            <h1 style="color: yellowgreen;">{{g.name}}</h1>
        {% endif %}
    {% endfor %}
{% endfor %}

它在浏览器上不显示任何内容,但应显示不同枪支的名称,例如 25 式(突击步枪)或 MW11(手枪)

标签: pythondjango

解决方案


我找到了另一种方法。将其转换为字符串。使用 slugify

    {% for g in arm %}
        {% if g.weapon_type|slugify == weapon.title|slugify %}
            <a href="#"><div class="subsubbox">{{ g.name }}</div></a>
        {% endif %}
    {% endfor %} 

推荐阅读