【问题标题】:ValueError when querying sqlite db in Django在 Django 中查询 sqlite db 时出现 ValueError
【发布时间】:2015-07-10 15:04:25
【问题描述】:
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)

上面是我设置事件表的模型。我已经设置好了,所以外键“学生”是从 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'

我觉得这个问题与学生是用户表中的外键有关(我从 django.contrib.auth.models 导入用户)。我终其一生都无法弄清楚自己做错了什么。

【问题讨论】:

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

标签: python django sqlite


【解决方案1】:

student属性是外键(整数),需要搜索Student的用户名。

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

【讨论】:

    【解决方案2】:

    当通过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')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-09
      • 2013-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-13
      • 2023-03-05
      相关资源
      最近更新 更多