2015-07-10 3 views
0
class Event(models.Model): 
    student = models.ForeignKey(User) 
    startTime = models.DateTimeField('Start Time') 
    endTime = models.DateTimeField('End Time') 

def __str__(self):    
    return str(self.student) 

Выше моя модель, которая настраивает таблицу событий. Я настроил его так, чтобы иностранный ключ «ученик» был извлечен из пользователей admin на сайте Django.ValueError при запросе sqlite db в Django

Когда я бегу Event.objects.all():

[<Event: test.student1>] 

это хорошо.

Когда я бегу Event.objects.get(student='test.student1'):

Traceback (most recent call last): 
File "<console>", line 1, in <module> 
File "/usr/local/lib/python2.7/dist-packages/django/db/models/manager.py", line 127, in manager_method 
return getattr(self.get_queryset(), name)(*args, **kwargs) 
File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 325, in get 
clone = self.filter(*args, **kwargs) 
File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 679, in filter 
return self._filter_or_exclude(False, *args, **kwargs) 
File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 697, in _filter_or_exclude 
clone.query.add_q(Q(*args, **kwargs)) 
File "/usr/local/lib/python2.7/dist-packages/django/db/models/sql/query.py", line 1304, in add_q 
clause, require_inner = self._add_q(where_part, self.used_aliases) 
File "/usr/local/lib/python2.7/dist-packages/django/db/models/sql/query.py", line 1332, in _add_q 
allow_joins=allow_joins, split_subq=split_subq, 
File "/usr/local/lib/python2.7/dist-packages/django/db/models/sql/query.py", line 1194, in build_filter 
lookups, value) 
File "/usr/local/lib/python2.7/dist-packages/django/db/models/fields/related.py", line 1740, in get_lookup_constraint 
lookup_class(target.get_col(alias, source), val), AND) 
File "/usr/local/lib/python2.7/dist-packages/django/db/models/lookups.py", line 96, in __init__ 
self.rhs = self.get_prep_lookup() 
File "/usr/local/lib/python2.7/dist-packages/django/db/models/lookups.py", line 134, in get_prep_lookup 
return self.lhs.output_field.get_prep_lookup(self.lookup_name, self.rhs) 
File "/usr/local/lib/python2.7/dist-packages/django/db/models/fields/__init__.py", line 727, in get_prep_lookup 
return self.get_prep_value(value) 
File "/usr/local/lib/python2.7/dist-packages/django/db/models/fields/__init__.py", line 985, in get_prep_value 
return int(value) 
ValueError: invalid literal for int() with base 10: 'test.student1' 

Я чувствую, что проблема связана с студент ЯВЛЯЮЩЕЙСЯ внешние ключи из таблицы Users (я импортирующей из django.contrib.auth.models импорта пользователя). Я не могу за всю жизнь понять, что я делаю неправильно.

+0

'Event.objects.get (student__username = 'test.student1')' – NightShadeQueen

ответ

2

Атрибут student - это внешний ключ (целое число), вместо этого вам нужно искать имя пользователя для ученика.

Event.objects.get(student__username='test.student1')

0

При поиске Event через student, вы должны передать фактический student экземпляр.

Event.objects.get(student=student_instance) 

Что происходит в вашем случае:

Для модели Student (производной от User модели Джанго), __str__() метода возвращает username. Итак, когда вы делаете str(self.student) в своем __str__() методе модели Event, вы получаете username экземпляра student. Вы предполагаете, что test.student1 является студенческим экземпляром, но введите его username экземпляра учащегося.

Измените свой запрос, чтобы получить доступ через имя пользователя ученика i.e student__username, и он должен работать.

Event.objects.get(student__username='test.student1') 
Смежные вопросы