Логика фильтрации внешнего ключа в 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
.