набор запросов Django - PullRequest
       16

набор запросов Django

0 голосов
/ 23 октября 2009

Я пишу набор запросов в Django. В первом запросе он работает нормально. Во втором он выдает ошибку "невозможно разрешить xyz в поле .. .."

В моделях.py

class XYZ(models.Model):

  id= models.AutoField(primary_key=True)

  name = models.CharField(max_length=200)

  addres= models.CharField(max_length=200)

  def __unicode__():
    return self.name

class ASD(models.Model):
  id= models.AutoField(primary_key=True)
  pub = models.ForeignKey(XYZ)
  city= models,CHarField(max_length=200)

Первый набор запросов:

queryset= XYZ.objects.filter(asd__pub____exact='4535344sds3646fhgf7987')

Второй набор запросов:

queryset= ASD.objects.filter(xyz__id____exact='4535344sds3646fhgf7987')

Но согласно django docs это должно работать.

Ответы [ 2 ]

0 голосов
/ 28 октября 2009

В документах, на которые вы ссылаетесь, внимательно посмотрите на модель ввода:

class Entry(models.Model):
    blog = models.ForeignKey(Blog)

и как она ссылается на модель блога:

>>> Entry.objects.filter(blog__name__exact='Beatles Blog')

blog была определена как полеэто ForeignKey к модели блога.Не нужно придумывать и преобразовывать внешнее имя модели (в данном случае «Блог») в значение поля («Блог»);это просто использование имени, которое вы ему даете.Поэтому вам следует изменить определение модели ASD:

class ASD(models.Model):
  xyz = models.ForeignKey(XYZ)

У вас есть pub сейчас, но вы пытаетесь получить его с помощью xyz, который не определен.Кроме того, у вас слишком много подчеркиваний в одном месте;он должен читать:

queryset= ASD.objects.filter(xyz__id__exact='4535344sds3646fhgf7987')

Конечно, вы можете изменить один запрос на:

queryset= ASD.objects.filter(pub__id__exact='4535344sds3646fhgf7987')
0 голосов
/ 23 октября 2009

Ошибка говорит о том, что ASD объекты в вашем QuerySet не имеют поля xyz. Возможно, у вас есть опечатка или имя Field не просто строчная версия имени Model, на которое оно ссылается?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...