模板中的 Django 对象唯一 id 值

Django object unique id value in Template

在此模式中,我有一个名为 stockCode 的外键,该键具有重复值,我只想获取其中一个(唯一)。

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)
    

我试过这个:

@xframe_options_sameorigin
def product(request):
    stock = Stock.objects.all().values('productId').distinct()
    return render(request,"product.html",{"products":stock})

但它只给了我 id 值 蚂蚁试图添加 .values('productId','productId__Name') 它给了我 productId__Name 独特的价值,我不想要这个。我只希望 productId 是唯一的。

如果您使用的是 Postgres 数据库,您可以将列名传递给 distinct 函数以告诉 Postgres 要检查哪些列的区别。否则数据库将使用整行来检查差异性。请参阅 distinct here.

的文档

你的情况:

stock = Stock.objects.all().values('productId__stockCode').distinct('productId__stockCode')

PS。我建议遵循 Django naming conventions 因为它会让你的代码更容易理解和使用:

  1. productId 应该是 product 因为 ForeignKey 引用了 Product。 Django 将在迁移中创建一个 product_id 列。
  2. Name 应该是小写 name.
  3. stockCode 应该是 stock_code.