2014-12-14 2 views
1

Я пытаюсь запустить запрос filter(), фильтруя на основе родственной модели, и он выбрасывает исключение DoesNotExist.Django filter() query throwing Исключение DoNotExist

CourseMember.objects.filter(user__last_name__icontains='comadena') 

Я был в предположении, что фильтрация не выбрасывает никаких исключений DoesNotExist, а просто возвращает пустой QuerySet, если совпадений не осталось. Есть ли какие-то другие get(), так как я технически запрашиваю связанную таблицу для фильтра?

Кроме того, как ни странно, ошибка возникает только для данного значения поиска user__last_name__icontains. Он работает с другими значениями, как 'smith', 'johnson', 'frink' и т.д.

Модели:

class User(AbstractBaseUser): 
    email = models.EmailField(blank=True, null=True, unique=True, max_length=254) 
    first_name = models.TextField(blank=True) 
    last_name = models.TextField(blank=True) 
    is_superuser = models.BooleanField(default=False) 

class Course(models.Model): 
    coursenum = models.TextField(blank=True, null=True, db_index=True) 
    title = models.TextField(blank=True, null=True) 
    school = models.TextField(blank=True, null=True) 
    category = models.TextField(blank=True, null=True) 

class CourseMember(models.Model): 
    create_date = models.DateTimeField(auto_add_now=True) 
    course = models.ForeignKey(Course) 
    user = models.ForeignKey(User) 
    role = models.TextField(blank=True, null=True, db_index=True) 
    section = models.TextField(blank=True, null=True, db_index=True) 

Вот сообщение об ошибке при запуске запроса в терминале:

CourseMember.objects.filter(user__last_name__icontains='comadena') 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "/usr/local/lib/python3.4/dist-packages/django/db/models/query.py", line 119, in __repr__ 
    return repr(data) 
    File "/usr/local/lib/python3.4/dist-packages/django/db/models/base.py", line 459, in __repr__ 
    u = six.text_type(self) 
    File "/home/bookeducator/go/course/models.py", line 236, in __str__ 
    return 'CourseMember: %s (%s)' % (self.user.email, self.role) 
    File "/usr/local/lib/python3.4/dist-packages/django/db/models/fields/related.py", line 572, in __get__ 
    rel_obj = qs.get() 
    File "/usr/local/lib/python3.4/dist-packages/django/db/models/query.py", line 357, in get 
    self.model._meta.object_name) 
account.models.DoesNotExist: User matching query does not exist. 
+0

Не могли бы вы предоставить свои соответствующие определения моделей и полную трассировку, которую вы получаете? Благодарю. – alecxe

+0

Надеюсь, редактирование поможет. – ngoue

ответ

2

Я нашел вопрос. Информация об ошибке указывала, что ошибка возникает при вызове метода str, и я обнаружил в моей базе определенный объект, который вызывал ошибку. Моя система настроена для фильтрации всех объектов, у которых нет my_instance.is_active = True. Это вызвало проблему, потому что фильтр не позволял нам вернуть прикрепленный пользовательский объект, который больше не активен.

Смежные вопросы