Как проверить пользователя по 2 полям из другой модели с полями ManyToMany

Как мне проверить request.user на 2 поля одновременно

?

Я хочу показывать разные страницы в заголовке, если пользователь является заказчиком или подрядчиком по другому полю many to many или если он является подрядчиком и заказчиком в одно и то же время показывать обе страницы

Я не уверен, как я должен это сделать

Models.py:

class CounterParty(models.Model):
    GUID = models.UUIDField(default=uuid.uuid4, editable=True, unique=True)
    name = models.CharField(max_length=150, verbose_name='Name')
    customer = models.BooleanField(default=False, verbose_name='customer')
    contractor = models.BooleanField(default=False, verbose_name='contractor')
    counter_user = models.ManyToManyField(User, blank=True, related_name='counter_user')

views.py:

@login_required
def home_view(request):

    counter_party = CounterParty.objects.all()

    context = {
        'counter_party': counter_party
    }

    return render(request, 'common/home.html', context)

header.html:

{% for counter in counter_party %}
   {% if request.user in counter.counter_user.all %}
      <li class="nav-item"><a class="nav-link" href="{% url 'contractor_view' %}"><span 
                                       class="nav-link-title">Contractor</span></a></li>
   {% endif %}
{% endfor %}
{% if request.user.is_staff %}
  <li class="nav-item"><a class="nav-link" href="{% url 'admin:index' %}"><span
                                class="nav-link-title">Admin</span></a></li>
{% endif %}

Вам нужно проверить, связан ли пользователь с объектом CounterParty, у которого оба поля установлены в True (В ваших представлениях):

@login_required
def home_view(request):
    counter_party = CounterParty.objects.filter(counter_user=request.user)
    customer = False
    contractor = False
    for cp in counter_party:
        if cp.customer:
            customer = True
        if cp.contractor:
            contractor = True
    context = {
        'customer': customer,
        'contractor': contractor,
    }
    return render(request, 'common/home.html', context)
Вернуться на верх