Django 检查模型字段是否相等

Django checking if model fields are equal

所以我得到了这个

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

但即使字段具有相同的值,它也不 return 正确。 顺便说一下, 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()

尝试使用 ifequal

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

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

编辑:

您可以使用添加过滤器将 str 强制转换为 int

{% for item in numItems|add:"0" %}

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

将 int 强制转换为 str 只需使用 slugify

{{ some_int|slugify }}

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

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 %}

这是你必须要做的

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

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

def __str__(self):
    return self.Tipos

this returns Tipos 字符串值但实际上 sth.tipo 是对象。尝试在控制台中打印 tipo 值,然后它会显示类似

的内容
Productous Object(id)

这是对象所以在你的情况下字符(Tipos)正在与 TiposOpciones.You 的对象(tipos)进行比较会想要将它与 id 进行比较因为它是主键一旦你有主键你可以装扮该实例的任何其他字段值