Django检查模型字段是否相等

时间:2015-05-28 21:02:55

标签: django compare field models

所以我得到了这个

{% if articulo.Tipos == sth.tipo %}
    Equal
{% else %}
    Not Equal
{% endif %}

但即使字段具有相同的值,它也不会返回true。 顺便说一句,articulo.Tipo是sth.tipo的外键,任何想法为什么它不能正常工作?

型号:

class Productos(models.Model):
    tipo = models.ForeignKey("TiposOpciones", null=True, blank=True, related_name='Productos_tipo')

class TiposOpciones(models.Model):
    Tipos = models.CharField(max_length=50, null=True)

查看:

tiposopciones = TiposOpciones.objects.all()
productos = Productos.objects.all()

3 个答案:

答案 0 :(得分:1)

要调试此类情况,可以方便地在模板中显示您比较的值:

articulo.Tipos = '{{ articulo.Tipos }}'<br>
sth.tipo = '{{ sth.tipo }}'<br>

{% if articulo.Tipos == sth.tipo %}
    Equal
{% else %}
    Not Equal
{% endif %}

此外,如果您比较实例,最好比较他们的ID

{% if articulo.Tipos.id == sth.tipo.id %}

答案 1 :(得分:0)

尝试使用 ifequal

{% ifequal articulo.Tipos sth.tipo|slugify %}
    Equal
{% else %}
    Not Equal
{% endifequal %}

我也建议检查两者的数据类型!

编辑:

你可以使用add filter

将str强制转换为int
{% for item in numItems|add:"0" %}

https://docs.djangoproject.com/en/dev/ref/templates/builtins/#add

强制int to str只使用slugify

{{ some_int|slugify }}

答案 2 :(得分:0)

这就是您要做的

{% if articulo.id == sth.tipo.id %}
   Equal
{% else %}
   Not Equal
{% endif %}

sth.tipo实际上是一个对象,您正在将字符与对象进行比较。您在管理面板中看到相同值的原因是,在您使用的TiposOpciones模型中

def __str__(self):
    return self.Tipos

这将返回Tipos字符串值,但实际上sth.tipo是对象。尝试在控制台中打印tipo值,它将显示类似

Productous Object(id)

是对象,因此在您的情况下,字符(Tipos)与TiposOpciones的对象(tipos)进行了比较。您希望将其与id进行比较,因为一旦拥有主键,它就可以作为主键使用,您可以将任何其他字段值用作垃圾对于那个例子