Как исправить ошибку prefetch_related() для моделей Brand2 и Clients, ругается на clt1?
Ошибка: Cannot find 'clt1' on Product object, 'clt1' is an invalid parameter to prefetch_related() Вопрос: Как исправить ошибку prefetch_related() для моделей Brand2 и Clients, ругается на clt1?
models
class Clients(models.Model):
STATUS_CHOICES = (
(0, 'Не действует'),
(1, 'Действует'),
)
client_id = models.ForeignKey(ListUsers, on_delete=models.CASCADE, verbose_name='ID клиента')
mf_id = models.IntegerField(verbose_name='ID бренда')
k_up = models.FloatField(default=1, verbose_name='Наценка к цене закупа')
k_dn = models.FloatField(default=1, verbose_name='Скидка к цене продажи')
published = models.IntegerField(default=1, blank=True, choices=STATUS_CHOICES, verbose_name='опубликован')
updated = models.BooleanField(default=False, editable=False, blank=True, verbose_name='Обновляется')
class Meta:
ordering = ('client_id',)
verbose_name = 'Индивиуальная скидка на производителя1'
verbose_name_plural = 'Индивиуальные скидки на производителя1'
unique_together = ('client_id', 'mf_id',)
def __str__(self):
return f'{self.client_id}'
class Brand(models.Model):
STATUS_CHOICES = (
(0, 'Не опубликовано'),
(1, 'Опубликовано'),
)
brand_id = models.IntegerField(primary_key=True, db_index=True, unique=True, verbose_name='ID')
name = models.CharField(max_length=200, unique=True, db_index=True, verbose_name='Наименование в своем прайсе')
slug = models.SlugField(max_length=200, db_index=True, blank=True, unique=True, verbose_name='URL')
clt1 = models.ManyToManyField(Clients, through="Brand2" )
published = models.IntegerField(default=1, blank=True, choices=STATUS_CHOICES, verbose_name='опубликован')
updated = models.BooleanField(default=False, editable=False, blank=True, verbose_name='Обновляется')
class Meta:
ordering = ('name',)
verbose_name = 'Бренд'
verbose_name_plural = 'Бренды'
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('brand', kwargs={'brand_id': self.pk})
class Brand2(models.Model):
STATUS_CHOICES = (
(0, 'Не действует'),
(1, 'Действует'),
)
brand_id = models.ForeignKey(Brand, on_delete=models.CASCADE, verbose_name='ID бренда')
clients_id = models.ForeignKey(Clients, on_delete=models.CASCADE, verbose_name='ID клиента')
published = models.IntegerField(default=1, blank=True, choices=STATUS_CHOICES, verbose_name='опубликован')
updated = models.BooleanField(default=False, editable=False, blank=True, verbose_name='Обновляется')
class Meta:
ordering = ('clients_id',)
verbose_name = 'Индивиуальная скидка на производителя2'
verbose_name_plural = 'Индивиуальные скидки на производителя2'
unique_together = ('brand_id', 'clients_id')
def __str__(self):
return f'{self.clients_id}'
class Product(models.Model):
STATUS_CHOICES = (
(0, 'Не опубликовано'),
(1, 'Опубликовано'),
)
STATUS_NEW = (
(0, 'Нет'),
(1, 'Да'),
)
id_p = models.BigIntegerField(primary_key=True, db_index=True, unique=True, verbose_name='ID продукта')
artikul = models.CharField(max_length=200, db_index=True, blank=True, verbose_name='Артикул')
brend = models.CharField(max_length=200, db_index=True, blank=True, verbose_name='Бренд для поиска')
analog = models.CharField(max_length=255, blank=True, verbose_name='Аналоги артикула')
category = models.ForeignKey(Category,blank=True, on_delete=models.CASCADE, related_name='products', verbose_name='Категория')
brand = models.ForeignKey(Brand, on_delete=models.PROTECT, verbose_name='Бренд')
class Meta:
ordering = ('product_time', 'name')
index_together = (('id_p'),)
verbose_name = 'Продукт'
verbose_name_plural = 'Продукты'
def __str__(self):
return f'{self.id_p}'
def get_absolute_url(self):
return reverse('shop:product_detail',
args=[self.category.category_id, self.id_p])
views
products = Product.objects.filter(id_p__in=pages_id, published=True).select_related('brand', 'category','product_sklad').prefetch_related(Prefetch('clt1', queryset=Brand2.objects.select_related('brand_id', 'clients_id')))