Сравнение результатов запроса Django с оператором if - PullRequest
1 голос
/ 07 мая 2019

Необходимо проверить изменяемые значения в браузере с помощью браузера, проверить и ввести случайный идентификатор в URL, который находится в кнопке, так что я не очень разбираюсь в django и прочем. Я проверяю данные, которые будут обновлены или удалены, которые могут проверено, например, tenantid. Я собираюсь нажать update на одной строке записи, и механики проверят, равен ли запись tenantid моему идентификатору арендатора или нет. Проблема в том, что я не могу сравнить результат запроса со значением int.

Если будет лучше, я буду рад услышать, спасибо, что доброго времени суток.

@login_required()  def customer_update(request, pk):
    customer = get_object_or_404(Customer, pk=pk)
    valueOwnerTenantid = Customer.objects.values_list('tenantid',   flat=True).filter(id=pk)
    print(valueOwnerTenantid)
    print(request.user.tenantid)
    print(valueOwnerTenantid.query)

    if number(valueOwnerTenantid) == number(request.user.tenantid):
        if request.method == 'POST':
            print('Equal and POST')
            form = CustomerForm(request.POST, instance=customer)
        else:
            print('Equal and Get')
            form = CustomerForm(instance=customer)
            return save_customer_form(request, form, 'customer_update_partial.html')
    else:

Ответы [ 3 ]

4 голосов
/ 07 мая 2019

Вас интересует только одно значение, а не QuerySet значений, поэтому вы должны использовать .get(..) вместо .filter() здесь.Но на самом деле вы можете даже полностью его опустить, поскольку вы уже получили tenantid в customer.

Таким образом, ваше представление должно выглядеть следующим образом:

@login_required()
def customer_update(request, pk):
    customer = get_object_or_404(Customer, pk=pk)
    if <b>customer.tenantid</b> == request.user.tenantid:
        # ...

, что говорится,довольно странно, что ваш магазин имеет id в ваших моделях, а не ForeignKey для какой-то Tenant модели и т. д. Делать ссылки без ForeignKey s обычно не хорошая идея:возможно, что tenantid s не относятся к реальным арендаторам, например.Более того, по умолчанию Django не будет добавлять индекс в столбец tenantid, что делает поиск клиента с заданным tenantid более дорогим в вычислительном отношении.

3 голосов
/ 07 мая 2019

Вы можете попробовать что-то вроде этого, если вы ищете записи с определенным tenant_id

my_tenant_id = request.user.tenantid
Customer.objects.filter(tenantid=my_tenant_id)

или что предложил Виллем Ван Онсем для одиночной записи

2 голосов
/ 07 мая 2019

Customer.objects.values_list('tenantid', flat=True).filter(id=pk) вернет список вместо одного значения. Похоже, вы получаете один и тот же Customer объект дважды

Вы можете удалить строку valueOwnerTenantid = Customer.objects.values_list('tenantid', flat=True).filter(id=pk) и просто использовать customer.tennantid, чтобы получить tennantid

if customer.tennantid == request.user.tenantid:
   ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...