Логика фильтрации внешнего ключа в Django ORM дает неясные результаты

У меня есть следующие два запроса, установленные как свойства модели django

    1 - Comment.objects.filter(ForeignKeyField=self) 
    2 - Comment.objects.filter(ForeginKeyField=self.id)

Я не понимаю, почему обе эти строки дают один и тот же результат, а именно CommentObjectList? Почему я могу фильтровать набор результатов комментариев с помощью self и self.id одновременно?

Поле FK на самом деле содержит первичный ключ для связанной записи. Таким образом

Comment.objects.filter(ForeginKeyField=self.id)

должен дать нужный результат (при условии, что self здесь экземпляр модели внешнего ключа)

Comment.objects.filter(ForeginKeyField=self)

попытается запихнуть весь экземпляр и сопоставить его, так что вы будете сопоставлять int или UUID (в зависимости от того, какой у вас ключ) с экземпляром объекта FK, и, конечно, это не будет соответствовать.

Примечание: в Django имена полей должны использовать подчеркивание, по соглашению, поэтому foreign_key_field, а не ForeignKeyField.

Вернуться на верх