Уникальное значение 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, потому что это сделает ваш код более легким для понимания и использования:

  1. productId скорее должен быть product, потому что ForeignKey ссылается на Product. Django создаст колонку product_id в миграции.
  2. Name должны быть строчными name.
  3. stockCode должны быть stock_code.
Вернуться на верх