Django: Как проверить, есть ли элемент в наборе запросов? - PullRequest
0 голосов
/ 02 февраля 2020

Я хотел бы сделать так, чтобы current_user существовал в наборе запросов, поэтому я пытаюсь:

{% if obj.payer.name == current_user.username %}
    {{ obj.price|intcomma }} / {{obj.dutch_payer.all.count}}</p>
    <p>={{ obj.price|div_payer_me:obj.dutch_payer.all.count|intcomma }}</p>
{% else %}
    {% if current_user.username in obj.dutch_payer.filter(name=current_user.username) %}
        {{ obj.price|intcomma }} / {{obj.dutch_payer.all.count|add1}}</p>
        <p>={{ obj.price|div_payer_notme:obj.dutch_payer.all.count|intcomma }}</p>
    {% else %}
        0
    {% endif %}
{% endif %}

, но возникает ошибка:

Не удалось проанализировать остаток: '(name = current_user.username) 'from' obj.dutch_payer.filter (name = current_user.username) '

Модель Tempfriend:

class Tempfriend(core_models.TimeStampedModel):
    name = models.CharField(max_length=30)
    belongs_to = models.ForeignKey(
        user_models.User, on_delete=models.CASCADE, related_name="belongs_to")

    def __str__(self):
        return self.name

moneylog модель:

class Moneylog(core_models.TimeStampedModel):

    moneybook = models.ForeignKey(
        moneybook_models.Moneybook, on_delete=models.CASCADE)
    pay_day = models.DateTimeField(default=NOW)
    payer = models.ForeignKey(
        tempfriend_models.Tempfriend, on_delete=models.CASCADE, related_name="payer")
    dutch_payer = models.ManyToManyField(
        tempfriend_models.Tempfriend, related_name="dutch_payer", blank=True)
    price = models.IntegerField()
    category = models.CharField(max_length=10)
    memo = models.TextField()

    objects = models.Manager()

как видите, dutch_payer и current_user - это разные модели.

Как я могу проверить есть ли current_user в dutch_payer?

Попробовал:

@register.filter
def user_in_dutch_payers(current_user, obj):
    return obj.dutch_payer.filter(name=current_user.username).exists()

1 Ответ

1 голос
/ 02 февраля 2020

Вы не можете использовать запросы непосредственно в шаблоне (шаблоны написаны на Django языке шаблонов ). Вместо этого вы можете использовать простой тег :

Добавить свои собственные теги в settings.py:

TEMPLATES = [
{
    'OPTIONS': {
        'builtins': [
            'myprojectname.templatetags.custom_tags',

Далее, поместите этот файл в ваше приложение templatetags/custom_tags.py

from django import template
register = template.Library()

@register.simple_tag
def user_in_dutch_payers(current_user, obj):
    return obj.dutch_payer.filter(name=current_user.username).exists()

И, наконец, используйте тег в шаблон :

{% user_in_dutch_payers current_user obj as check_user_in_dutch_payers %}
{% if check_user_in_dutch_payers %} 
    {{ obj.price|intcomma }} / {{obj.dutch_payer.all.count|add1}}</p>
    <p>={{ obj.price|div_payer_notme:obj.dutch_payer.all.count|intcomma }}</p>
{% else %}
    0
{% endif %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...