Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 30, 2021 18:55:30

consta
Зарегистрирован: 2021-11-30
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

django - ForeignKey filter

# здесь штрих код и название
class Art(models.Model):
bar = models.CharField(max_length=13, verbose_name = “Штрихкод”, db_column = “Штрихкод”, default=“”,,primary_key=True)
nom = models.CharField(max_length=200, verbose_name = “Номенклатура”, db_column = “Номенклатура”, default=“”)

# здесь цена
class Price(models.Model):
art = models.ForeignKey(Art, on_delete=models.SET_NULL, null=True)
pr = models.DecimalField(decimal_places=2, max_digits=10, verbose_name = “Цена”, db_column = “Цена”, default=0)

# заливаю таблицы скриптом из эксель файла
# делаю запрос получить все записи из таблицы Price и прилепить название номенклатуры (если не найдено то там null)
data = Price.objects.values('art_id', ‘art__nom’, ‘pr’)

# как повесить фильтр на поле art_id (где по факту в sql записан штрих код), не на art__bar а именно art_id?



можно конечно завести отдельно ForeignKey а отдельно штрих код, но не хочеться заводить ещё одно поле
слишком большой объем номенклатуры

Отредактировано consta (Ноя. 30, 2021 21:08:24)

Офлайн

#2 Ноя. 30, 2021 19:48:57

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

django - ForeignKey filter

consta
не на art__bar а именно art_id
а где у вас фильтр на art__bar?
 data = Price.objects.filter(art_id__gt=1000).values('art_id', art__nom, pr)



Офлайн

#3 Ноя. 30, 2021 19:54:26

consta
Зарегистрирован: 2021-11-30
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

django - ForeignKey filter

Price.objects.filter(art_id__icontains = 1000) я вот так пробовал

но там ошибка что нельзя icontains на ForeignKey
Related Field got invalid lookup: icontains



Price.objects.filter(art_id__gt = 1000) вот эта работает выводит все которые больше 1000, а мне нужно icontains

Отредактировано consta (Ноя. 30, 2021 21:29:22)

Офлайн

#4 Дек. 1, 2021 11:04:27

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

django - ForeignKey filter

consta
ну так art_id это целое число, к нему неприменима операция icontains. Хотя я даже приблизительно не понимаю, зачем такое извращение может понадобиться, попробуйте как-то так

 Price.objects.annotate(id_as_str=Cast('art_id', output_field=CharField())).filter(id_as_str__icontains='1000')



Офлайн

#5 Дек. 1, 2021 11:31:24

consta
Зарегистрирован: 2021-11-30
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

django - ForeignKey filter

у меня в art_id не просто автоматические id а сразу штрихкод


 class Art(models.Model):
    shk = models.CharField(max_length=13, verbose_name = "ШК", db_column = "ШК", default="",primary_key=True)
    nom = models.CharField(max_length=200, verbose_name = "Номенклатура", db_column = "Номенклатура", default="")
    
class Price(models.Model):
    art = models.ForeignKey(Art, on_delete=models.SET_NULL, null=True)
    userid = models.PositiveIntegerField(default=0, verbose_name = "Код клиента", db_column = "КодKлиента")
    pr = models.DecimalField(decimal_places=2, max_digits=10, verbose_name = "Цена", db_column = "Цена", default=0)
мне нужна таблица Price и Номенклатура из Art всё это я вывожу в таблицу на сайте через (http://tabulator.info/) с которой в обратку приходят запросы на фильтрцию я их складываю в fields_filters
queryset = Price.objects.select_related('art').filter(**fields_filters)

всё работает нормально кроме поля со штрих кодом (поле штрих код фильтруется только через равно) contains не хочет


как вариант делать автоматические id которые делает django a штрих код лепить отдельным полем


тогда придётся при заливке price искать соответствие в art и связывать а там 70к строк(это долго цены я гружу из эксель файла) и юзеров 1000 примерно (хотел экономить место на хостинге и не заводить доп поле они и так связаны по штрихкодам зачем их ещё раз связывать)

или продублировать два столбца штрихкодов один для связи другой для фильтров

ну или raw запрос сгенерить

Отредактировано consta (Дек. 1, 2021 11:51:14)

Офлайн

#6 Дек. 1, 2021 13:44:08

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

django - ForeignKey filter

а тогда зачем вы это поле через art_id лукапите?

 queryset = Price.objects.select_related('art').filter(art__shk__icontains='1000')



Офлайн

#7 Дек. 2, 2021 07:39:35

consta
Зарегистрирован: 2021-11-30
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

django - ForeignKey filter

админ удалите эту ветку , чтоб народ не путать

Отредактировано consta (Дек. 2, 2021 07:39:47)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version