Запрашивать много-много полей в Django - PullRequest
0 голосов
/ 01 апреля 2010

В моделях есть много-много полей, как,

из emp.models import Name

  def info(request):
     name = models.ManyToManyField(Name)

А в emp.models схема имеет вид

 class Name(models.Model):
      name = models.CharField(max_length=512)


      def __unicode__(self):
          return self.name

Теперь, когда я хочу запросить конкретный идентификатор, скажем, например:

         info=  info.objects.filter(id=a)
         for i in info:
              logging.debug(i.name) //gives an error 

как запрос должен получить имя

Спасибо ..

Ответы [ 2 ]

3 голосов
/ 01 апреля 2010

info.name - это ManyToManyField, поэтому, если вы хотите, чтобы все Name объекты были связаны с ним, вы должны использовать метод .all(). Только тогда вы получите список (набор запросов) Name объектов:

info_list = info.objects.filter(id=a)
for info_object in info_list:
    for name_object in info_object.name.all():
        print name_object.name
1 голос
/ 01 апреля 2010

Лукаш прав, но, как вы знаете, не имеет смысла фильтровать по идентификатору, если вы не используете info.object.filet(id__in=a) и a это какой-то список. Если вы фильтруете по одному идентификатору, вы должны сначала использовать objects.get (** kwargs), и он будет возвращать этот конкретный экземпляр Info вместо QuerySet.

...