Уникальное значение id объекта Django в шаблоне
<class Product(models.Model):
stockCode = models.CharField(primary_key=True,max_length=50,null=False, blank=False)
Name = models.CharField(max_length=120,null=False, blank=False)
Desc = models.CharField(max_length=120,null=True, blank=True)
price1 = models.FloatField(null=False, blank=False)
price2 = models.FloatField(null=False, blank=False)
publish = models.BooleanField(default=True)
def __str__(self):
return str(self.stockCode)
class Stock(models.Model):
id = models.AutoField(primary_key=True)
productId = models.ForeignKey(Product,null=False, blank=False,on_delete=models.PROTECT)
sizeId = models.ForeignKey(Varyasyon,null=True, blank=True,on_delete=models.PROTECT)
colorId = models.ForeignKey(Renk,null=False, blank=False,on_delete=models.PROTECT)
grubId = models.ForeignKey(Grub,null=True, blank=True,on_delete=models.PROTECT)
stock = models.IntegerField(null=True, blank=True)
photo = models.ImageField(null=False, blank=False)
def __str__(self):
return str(self.grubId)
В этом модале у меня есть внешний ключ с именем stockCode Этот ключ имеет дублирующиеся значения и я хочу получить только одно из них (уникальное).
Я пробовал следующее:
@xframe_options_sameorigin
def product(request):
stock = Stock.objects.all().values('productId').distinct()
return render(request,"product.html",{"products":stock})
но это дает мне только значение id
ant пытался добавить .values('productId','productId__Name') он дает мне productId__Name уникальное значение, а я не хочу этого. Я хочу, чтобы только productId был уникальным.
Если вы используете базу данных Postgres, вы можете передать в функцию distinct имена столбцов, чтобы указать Postgres, какие столбцы проверять на отличимость. В противном случае база данных будет использовать всю строку для проверки на отличимость. См. документацию для distinct здесь.
В вашем случае:
stock = Stock.objects.all().values('productId__stockCode').distinct('productId__stockCode')
PS. Я бы рекомендовал следовать соглашениям об именовании Django, потому что это сделает ваш код более легким для понимания и использования:
productIdскорее должен бытьproduct, потому чтоForeignKeyссылается наProduct. Django создаст колонкуproduct_idв миграции.Nameдолжны быть строчнымиname.stockCodeдолжны бытьstock_code.