2015-07-10 16 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) 

上面是我設置Event表的模型。我已經設置好了,這樣外鍵'學生'就從Django站點的管理員用戶那裏獲得了。查詢Django中的sqlite db時出現ValueError

當我運行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' 

我覺得這個問題有學生是從用戶表的外鍵做(我從django.contrib.auth.models進口導入用戶)。我不能爲了我的生活找出我做錯了什麼。

+0

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

回答

2

學生屬性是一個外鍵(整數),您需要搜索學生的用戶名。

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

0

當通過student仰視Event,你必須通過實際student實例。

Event.objects.get(student=student_instance) 

發生了什麼事,你的情況:

對於模型Student(從Django的User模型導出),__str__()方法返回username。因此,當您在Event模型的__str__()方法中執行str(self.student)時,會得到student實例的username。您假定test.student1是學生實例,但實際上是其學生實例的username

更改您的查詢以通過學生的用戶名即student__username訪問,它應該工作。

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