Запрос Django работает из оболочки, а не с сервера dev?Вызывает FieldError на сервере разработки - PullRequest
2 голосов
/ 28 марта 2011

У меня был веский момент с ORM Джанго (django 1.3). На сервере разработки:

# in x.modules.training.models
class Training(x.models.Base):
    trainers = models.ManyToManyField(staff_models.Staff, related_name='trainings_taught')
    people = models.ManyToManyField(x.models.Person, related_name='trainings_attended')

# in any view
from x.modules.staff.models import Staff
from x.models import Person

Staff.objects.filter(trainings_taught=12)
# [<Staff: Staff object>]

Person.objects.filter(trainings_attended=12)
# FieldError: Cannot resolve keyword 'trainings_attended' into field. Choices are: address, comment, contact_for_farmers, email, farmer, first_name, id, last_name, mobile_number, modified_by, modified_timestamp, national_id, passport_number, region, version

# Why would it work for one ManyToMany and not the other?

В то время как в универсальной оболочке python (примечание x находится на пути python) независимо от порядка двух строк импорта, оба запроса выполняются просто отлично.

>>> from x.models import *
>>> from x import modules
>>> Person.objects.filter(trainings_attended=12)
>>> modules.staff.models.Staff.objects.filter(trainings_taught=12)

Как это может быть?

1 Ответ

0 голосов
/ 29 марта 2011

Если у вас есть какой-либо класс, унаследованный от Учебного класса, вы должны гарантировать, что все связанные с ним имена разные.Поэтому вы должны объявить это как:

people = models.ManyToManyField(x.models.Person, related_name='%(app_label)s_%(class)s_trainings_attended')
...