Форум сайта python.su
# здесь штрих код и название
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)
Офлайн
constaа где у вас фильтр на art__bar?
не на art__bar а именно art_id
data = Price.objects.filter(art_id__gt=1000).values('art_id', ‘art__nom’, ‘pr’)
Офлайн
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)
Офлайн
consta
ну так art_id это целое число, к нему неприменима операция icontains. Хотя я даже приблизительно не понимаю, зачем такое извращение может понадобиться, попробуйте как-то так
Price.objects.annotate(id_as_str=Cast('art_id', output_field=CharField())).filter(id_as_str__icontains='1000')
Офлайн
у меня в 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)
Отредактировано consta (Дек. 1, 2021 11:51:14)
Офлайн
а тогда зачем вы это поле через art_id лукапите?
queryset = Price.objects.select_related('art').filter(art__shk__icontains='1000')
Офлайн
админ удалите эту ветку , чтоб народ не путать
Отредактировано consta (Дек. 2, 2021 07:39:47)
Офлайн