поиск глубины модели Джанго - PullRequest
0 голосов
/ 25 июня 2011

У меня три модели,

  • MTI = Информация о материале
  • MTD = Описание материала
  • MTIIMAGE = для каждого цвета и размера есть картинка

Я пытаюсь создать запрос, который возвращает разные цвета, однако полученные результаты не уникальны:

mymti[0].mtd_set.all()
[mtd: 1234567 - Medium black, mtd: 1122334455 - Medium pink, mtd: 12345678
- Large black]

Как я могу получить отдельный цвет из этого запроса, чтобы результат был

[mtd: 1234567 - средний черный, mtd: 1122334455 - средний розовый]

class mti(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=255)
    item = models.ForeignKey(item)
    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=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 mtd(models.Model):
    id = models.AutoField(primary_key=True)
    barcode = models.CharField(max_length=255)
    mti = models.ForeignKey(mti)
    size = models.ForeignKey(size)
    color = models.ForeignKey(color)
    weight = models.FloatField()
    class Meta:
        verbose_name = "MTD"
        verbose_name_plural = verbose_name
    def __unicode__(self):
        return u'%s - %s %s' % (self.barcode, self.size.name,self.color.name)

class mtiimage(models.Model):
    id = models.AutoField(primary_key=True)
    color = models.ForeignKey(color)
    mtd= models.ForeignKey(mtd)
    mti=models.ForeignKey(mti)
    pic1 = models.ImageField(verbose_name="Product 1 Image",upload_to='product')
    pic2 = models.ImageField(verbose_name="Product 2 Image",upload_to='product')
    pic3 = models.ImageField(verbose_name="Product 3 Image",upload_to='product')
    stamp = models.DateTimeField(auto_now=True)

     def __unicode__(self):
        return u'%s - %s' % (self.mtd.barcode, self.color.name)
    class Meta:
        verbose_name = "MTI Pic"
        verbose_name_plural = verbose_name

Мой взгляд

mydept = dept.objects.get(pk=deptid)
mymti = mti.objects.filter(dept=mydept).select_related()

Мой шаблон

{% for i in mymti %}
{% for m in i.mtd_set.all %}{{m.mtiimage_set.all.0.pic1.url}}{{m.mtiimage_set.all.0.color.name|lower}}{% endfor   %}
   {% endfor %}

1 Ответ

0 голосов
/ 26 июня 2011

Я решил эту проблему, изменив дизайн моей модели, поместив внешний ключ mtiimage в mti, то есть я могу запросить его напрямую

для n в mti.mtiimage_set.all () print n.color.name

...