模板中的 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 因为它会让你的代码更容易理解和使用:
productId
应该是 product
因为 ForeignKey
引用了 Product
。 Django 将在迁移中创建一个 product_id
列。
Name
应该是小写 name
.
stockCode
应该是 stock_code
.
在此模式中,我有一个名为 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 因为它会让你的代码更容易理解和使用:
productId
应该是product
因为ForeignKey
引用了Product
。 Django 将在迁移中创建一个product_id
列。Name
应该是小写name
.stockCode
应该是stock_code
.