Django: проблема сравнения строк в шаблоне - PullRequest
0 голосов
/ 05 апреля 2019

Я делаю простое сравнение {% if %}, но не могу сопоставить строки.

{% if request.user.username == empresa.vendedor|stringformat:"s" %}

Я проверил классы и:

request.user.username - это <class 'str'>.

empresa.vendedor|stringformat:"s" является <class 'str'>.

Я печатаю кейс и:

request.user.username - это Mariano.

empresa.vendedor|stringformat:"s" - это Mariano.

В модели

empresa.vendedor - это внешний ключ vendedores.nombre

class empresa(models.Model):
    ..... other fields ......
    Vendedor = models.ForeignKey("Vendedores", help_text="Estatus del contenido", blank=True, null=True, on_delete=models.CASCADE)

    class Meta:
        ordering = ['Nombre']

    def __str__(self):
        return str(self.Nombre)

class Vendedores(models.Model):
    nombre = models.CharField(max_length=200, help_text="Nombre", blank=False, null=True)
    apellido = models.CharField(max_length=200, help_text="Apellido", blank=False, null=True)

    def __str__(self):
        return str(self.nombre)

Также пробовал

{% if empresa.vendedor|stringformat:"s" in request.user.username %}
{% if request.user.username in empresa.vendedor|stringformat:"s" %}
{% if request.user.username == empresa.vendedor %}
{% if empresa.vendedor == request.user %}

Что мне здесь не хватает? Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 06 апреля 2019

Как насчет использования директивы with?Я думаю, проблема в том, что мы не можем использовать директиву pipe внутри условий.

{% with empresa.vendedor|stringformat:"s" as data %}
  {% if request.user.username == data %}
  // do something
  {% endif %}
{% endwith %}

Однажды у меня была похожая проблема, и я решил это решение.Я надеюсь, что это будет работать.

0 голосов
/ 08 апреля 2019

Я обнаружил опечатку, которую использовал empresa.vendedor, и это должен был быть Vendedor из-за устаревшей базы данных. Извините и спасибо всем.

0 голосов
/ 06 апреля 2019

Вы пробовали

{% if request.user.username == (empresa.vendedor|stringformat:"s") %}?

Побитовый 'или' (|) имеет более низкий приоритет, чем ==.См. https://docs.python.org/3/reference/expressions.html#operator-precedence

ОК, поэтому язык шаблонов Django - , а не python, и я не могу найти хорошую ссылку на выражения в языке шаблонов.Извините, здесь ничего не видно, двигайтесь дальше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...