Почему выдаёт ошибку ‘django.core.exceptions.FieldError: Cannot resolve keyword ‘category_id’ into field. Choices are: category_id’?

Ошибка 'django.core.exceptions.FieldError: Cannot resolve keyword 'category_id' into field. Choices are: category_id' возникает, когда в Django пытается быть произведена фильтрация или связь на поле, которого нет в модели.

Прежде чем перейти к решению этой проблемы, давайте разберёмся в возникшей ошибке. В ошибке указано, что Django не может разрешить ключевое слово 'category_id' в поле. 'category_id' относится к полю связи ForeignKey и является значением, которое хранит id связанного объекта.

Следующее предложение в ошибке расскажет нам об имеющихся выборах, указывая, что доступны только поля 'category_id'. Такая ситуация может возникнуть, когда вместо поля, связанного с ForeignKey, используется значение 'category_id'.

Проблема может возникнуть, когда вы пытаетесь выполнить фильтрацию или связь на поле, которое на самом деле не существует. При этом вы используете несуществующее поле 'category_id' вместо указания на поле связи ForeignKey.

Чтобы решить эту проблему, вы должны правильно указать имя поля связи ForeignKey вместо использования 'category_id'. Например, если у вас есть модель, которая имеет поле 'category', вы должны использовать 'category' вместо 'category_id'.

Пример:

# Модель, имеющая поле связи ForeignKey
class ModelName(models.Model):
category = models.ForeignKey(Category, on_delete=models.CASCADE)

# Ошибка
ModelName.objects.filter(category_id=1)

# Решение
ModelName.objects.filter(category=1)

В этом примере, вместо использования 'category_id=1', мы используем 'category=1', что является правильным именем поля связи ForeignKey.

Также стоит отметить, что при использовании методов, которые требуют наличия имени поля, таких как values(), values_list(), distinct(), annotate() и других, необходимо использовать правильное имя поля связи ForeignKey.

В заключение, чтобы избежать данной ошибки, убедитесь, что вы используете правильное имя поля связи ForeignKey при выполнении фильтрации или связи. Использование правильного имени поля поможет Django найти и разрешить это поле, избегая возникновения исключений FieldError.