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'.
Вернуться на верх