ValueError: Поле 'id' ожидало число, но получило '<строка>'
Я понятия не имею, что происходит, и я просмотрел множество других примеров стека и проблем, похожих на эту, но ни одна из них не помогает. Я пытаюсь отфильтровать список моих объектов в Django, и я сталкиваюсь с проблемой, упомянутой в заголовке: "ValueError: Поле 'id' ожидало число, но получило 'EE468'."
Мой models.py:
class Course(models.Model):
course_id = models.CharField(primary_key=True, max_length=25)
title = models.CharField(max_length=50, blank=True, null=True)
dept_name = models.ForeignKey('Department', models.DO_NOTHING, db_column='dept_name', blank=True, null=True)
credits = models.FloatField(blank=True, null=True)
class Meta:
managed = False
db_table = 'course'
def __str__(self):
return self.course_id + ", " + self.title + ", " + self.dept_name + ", " + str(self.credits)
class Takes(models.Model):
studid = models.ForeignKey(Student, models.DO_NOTHING, db_column='ID', blank=True, null=True) # Field name made lowercase.
course = models.ForeignKey(Section, models.DO_NOTHING, blank=True, null=True, related_name="takes_course")
sec = models.ForeignKey(Section, models.DO_NOTHING, blank=True, null=True, related_name="takes_section")
semester = models.ForeignKey(Section, models.DO_NOTHING, db_column='semester', blank=True, null=True, related_name="takes_semester")
year = models.ForeignKey(Section, models.DO_NOTHING, db_column='year', blank=True, null=True, related_name="takes_year")
grade = models.CharField(max_length=2, blank=True, null=True)
class Meta:
managed = False
db_table = 'takes'
def __str__(self):
return f"{self.studid_id}, {self.course_id}, {self.sec_id}, {self.semester_id}, {self.year_id}, {self.grade}"
class Teaches(models.Model):
instid = models.ForeignKey(Instructor, models.DO_NOTHING, db_column='ID', blank=True, null=True) # Field name made lowercase.
course = models.ForeignKey(Section, models.DO_NOTHING, blank=True, null=True, related_name="teach_course")
sec = models.ForeignKey(Section, models.DO_NOTHING, blank=True, null=True, related_name="teach_sec")
semester = models.ForeignKey(Section, models.DO_NOTHING, db_column='semester', blank=True, null=True, related_name="teach_sem")
year = models.ForeignKey(Section, models.DO_NOTHING, db_column='year', blank=True, null=True, related_name="teach_year")
class Meta:
managed = False
db_table = 'teaches'
def __str__(self):
return str(self.instid) + ", " + str(self.course_id) + ", " + str(self.sec_id) + ", " + str(self.semester_id)
мой вызов, который выдает ошибку:
profID = 12345
sem = 1
year = 2020
for teaches in Teaches.objects.filter(id=profID, semester=sem, year=year):
logging.info(teaches.course_id)
for takes in Takes.objects.filter(sec_id=teaches.sec_id, course_id=teaches.course_id):
if ( takes.course_id != teaches.course_id ): continue
logging.info("takes: " + takes.course_id)
logging.info(takes)
SOS Я никогда раньше не использовал django и не понимаю, почему это бросается:
Traceback (most recent call last):
File "/Python/3.8/lib/python/site-packages/django/core/handlers/exception.py", line 55, in inner
response = get_response(request)
File "/Python/3.8/lib/python/site-packages/django/core/handlers/base.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/ProjectPath/EEProject/myapp/viewsApi.py", line 69, in F4
for takes in Takes.objects.filter(sec_id=teaches.sec_id, course_id=teaches.course_id):
File "/Python/3.8/lib/python/site-packages/django/db/models/manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/Python/3.8/lib/python/site-packages/django/db/models/query.py", line 1071, in filter
return self._filter_or_exclude(False, args, kwargs)
File "/Python/3.8/lib/python/site-packages/django/db/models/query.py", line 1089, in _filter_or_exclude
clone._filter_or_exclude_inplace(negate, args, kwargs)
File "/Python/3.8/lib/python/site-packages/django/db/models/query.py", line 1096, in _filter_or_exclude_inplace
self._query.add_q(Q(*args, **kwargs))
File "/Python/3.8/lib/python/site-packages/django/db/models/sql/query.py", line 1466, in add_q
clause, _ = self._add_q(q_object, self.used_aliases)
File "/Python/3.8/lib/python/site-packages/django/db/models/sql/query.py", line 1496, in _add_q
child_clause, needed_inner = self.build_filter(
File "/Python/3.8/lib/python/site-packages/django/db/models/sql/query.py", line 1412, in build_filter
condition = self.build_lookup(lookups, col, value)
File "/Python/3.8/lib/python/site-packages/django/db/models/sql/query.py", line 1242, in build_lookup
lookup = lookup_class(lhs, rhs)
File "/Python/3.8/lib/python/site-packages/django/db/models/lookups.py", line 27, in __init__
self.rhs = self.get_prep_lookup()
File "/Python/3.8/lib/python/site-packages/django/db/models/fields/related_lookups.py", line 154, in get_prep_lookup
self.rhs = target_field.get_prep_value(self.rhs)
File "/Python/3.8/lib/python/site-packages/django/db/models/fields/__init__.py", line 1990, in get_prep_value
raise e.__class__(
ValueError: Field 'id' expected a number but got 'EE468'.