Фильтр Django возвращает пустой набор запросов - PullRequest
0 голосов
/ 03 сентября 2018

Я использую Django 2.0

В файле models.py моего приложения у меня есть модель Abc и менеджер моделей как AbcManager и набор запросов как AbcQueryset

class AbcQueryset(models.query.QuerySet):
    def search(self, query):

        q = Q(show_to_all=True)
        if query:
            q.add(Q(walmart_record__name__icontains=query) | Q(amazon_record__category__icontains=query), q.connector)

        if q:
            return self.filter(q).distinct()
        else:
            return self.all()


class AbcManager(models.Manager):
    def get_queryset(self):
        return AbcQueryset(self.model, self._db)

    def update_or_create(self, walmart_record, amazon_record, **save_data):

        record = Abc.objects.filter(
            walmart_record_id=walmart_record.pk,
            amazon_record_id=amazon_record.pk
        )

        print(record.query)
        print(record)

        print('walmart_record: ' + str(walmart_record.pk))
        print('amazon_reocrd: ' + str(amazon_record.pk))

        if record.exists():

            print('~~~~~~~~~~~~~~~~~~ record alreay exists')

            record.update(**save_data)

            print(record.first().pk)

            return record.first(), True

        record, created = self.get_queryset().get_or_create(
            walmart_record=walmart_record,
            amazon_record=amazon_record,
            **save_data
        )

        print('~~~~~~~~~~~~~~~~~~ record created')
        print(record.pk)

        return record, created

    def search(self, query):
        return_data = self.get_queryset().search(query).order_by('-created')

class Abc(models.Model):
    walmart_record = models.ForeignKey(WalmartRecord, on_delete=models.CASCADE)
    amazon_record = models.ForeignKey(AmazonRecord, on_delete=models.CASCADE, null=True)
    modified = models.DateTimeField(auto_now=True)
    created = models.DateTimeField(auto_now_add=True)

    objects = AbcManager()

    def __str__(self):
        return self.arbitrase

    def get_absolute_url(self):
        return reverse('detail', kwargs={'pk': self.pk})

Но при вызове ** update_or_create () всегда создается новая запись. **

Запуск сценария sql, сгенерированного из record.query нормально работает в phpmyadmin, и результаты приходят, но print(record) выдает пустой список как

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