Вы можете работать с объектом F
для обращения к полю:
from django.db.models import F, Q
Chat.objects.filter(Q(deletedchat=None) | Q(deletedchat__form_date__lt=F('last_updated')))
Это вернет Chat
объектов, для которых есть нет связанных DeletedChat
объектов или когда объект DeletedChat
имеет form_date
, который меньше поля last_updated
объекта Chat
.
Мы также можем использовать .exclude()
:
from django.db.models import F
Chat.objects.exclude(<b>deletedchat__form_date__gte=F('last_updated')</b>)
Однако оба не эквивалентны, если есть несколько связанных DeleteChat
объектов. В этом случае вариант .filter(..)
все еще может содержать Chat
, если существует хотя бы один связанный объект DeleteChat
, для которого from_date
меньше поля last_updated
. Для .exclude()
он будет исключен из момента, когда один из from_date
s больше, чем поле last_updated
.
В случае, если объект Chat
имеет не более одного объекта DeletedChat
вы можете вместо этого указать OneToOneField
[Django -doc] .