manytomanyfield distinct value
i have a model called mti(Material Information) which have a list of MTD(Material Description) and in each material description description there is a size and color
i have an MTI id i want to get all the distinct list of color values mymti = mti.objects.get(pk=1)
how can i get the list of colors from MTI mymti.mtd.color.name ?
class color(models.Model):
id = models.AutoField(primary_key=True)
name= models.CharField(max_length=255)
stamp= models.DateTimeField(auto_now=True)
def __unicode__(self):
return self.name
class mtd(models.Model):
id = models.AutoField(primary_key=True)
barcode = models.CharField(max_length=255)
#mti = models.ManyToManyField(mti)
size = models.ForeignKey(size)
color = models.ForeignKey(color)
weight = models.FloatField()
def __unicode__(self):
return u'%s - %s %s' % (self.barcode,self.color.name,self.size.name)
class Meta:
verbose_name = "MTD"
verbose_name_plural = verbose_name
class mti(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=255)
item = models.ForeignKey(item)
mtd= models.ManyToManyField(mtd)
country = models.ForeignKey(country)
dept = models.ForeignKey(dept)
fabric = models.ForeignKey(fabric)
sesason = models.ForeignKey(season)
sale = models.FloatField()
endUser = models.FloatField()
description = models.TextField(max_length=1000,blank=True,null=True)
year = models.CharField(max_length=开发者_StackOverflow中文版255,default=strftime("%Y", gmtime()))
front_page = models.BooleanField(verbose_name="Front Page",default=True)
active = models.BooleanField(default=True)
stamp = models.DateTimeField(auto_now=True)
def __unicode__(self):
return u'%s - %s' % (self.name, self.description)
class Meta:
verbose_name = "MTI"
verbose_name_plural = verbose_name
class mtiimage(models.Model):
id = models.AutoField(primary_key=True)
mtd = models.ManyToManyField(mtd)
image1 = models.ImageField(verbose_name="Product 1 Image",upload_to='product')
image2 = models.ImageField(verbose_name="Product 2 Image",upload_to='product')
image3 = models.ImageField(verbose_name="Product 3 Image",upload_to='product')
stamp = models.DateTimeField(auto_now=True)
def admin_thumbnail(self):
return u'<img src="%s" heigh="150" width="200" />' % (self.image1.url)
admin_thumbnail.short_description = 'Thumbnail'
admin_thumbnail.allow_tags = True
def __unicode__(self):
return u'%s ' % (self.id)
class Meta:
verbose_name = "MTI Image"
verbose_name_plural = verbose_name
Annotation
Use annotation.
mymti = mti.objects.get(pk=1)
unique_colors = mymti.mtd.values_list('color__name', flat=True).annotate()
colors = mymti.mtd.values_list('color__name', flat=True).distinct()
will result in :
colors = [color1, color2, ...]
精彩评论