Краткий ответ: при определенных условиях - да.
Когда конструкция LEFT СОЕДИНЯЕТСЯ с GenericForeignKey, Django вызывает
GenericRelation.get_extra_restriction , которая добавляет дополнительное условие к предложению ON с ограничением "content_type_id".
Для "ForeignKey" этот метод также вызывается с помощью возвратов None.
Вы можете использовать это место для наложения дополнительных ограничений в предложение ON, если вам удастся организовать свой код для получения надлежащих параметров ограничения в определенное время.
class UserForeignKey(models.ForeignKey):
def get_extra_restriction(self, where_class, alias, related_alias):
field = self.model._meta.get_field('user')
cond = where_class()
# Here is a hack to get custom condition parameters
value = SomeContextManager.get_needed_value()
lookup = field.get_lookup('exact')(field.get_col(related_alias), value)
cond.add(lookup, 'AND')
return cond
class WatchList(models.Model):
user = UserForeignKey(User)