Найти - Пользователи
Полная версия: django - ForeignKey filter
Начало » Python для новичков » django - ForeignKey filter
1
consta
# здесь штрих код и название
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 а отдельно штрих код, но не хочеться заводить ещё одно поле
слишком большой объем номенклатуры
FishHook
consta
не на art__bar а именно art_id
а где у вас фильтр на art__bar?
 data = Price.objects.filter(art_id__gt=1000).values('art_id', art__nom, pr)
consta
Price.objects.filter(art_id__icontains = 1000) я вот так пробовал

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



Price.objects.filter(art_id__gt = 1000) вот эта работает выводит все которые больше 1000, а мне нужно icontains
FishHook
consta
ну так art_id это целое число, к нему неприменима операция icontains. Хотя я даже приблизительно не понимаю, зачем такое извращение может понадобиться, попробуйте как-то так
 Price.objects.annotate(id_as_str=Cast('art_id', output_field=CharField())).filter(id_as_str__icontains='1000')
consta
у меня в 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 запрос сгенерить
FishHook
а тогда зачем вы это поле через art_id лукапите?

 queryset = Price.objects.select_related('art').filter(art__shk__icontains='1000')
consta
админ удалите эту ветку , чтоб народ не путать
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB