如何基于多对多相关对象的字段过滤django中的模型?

如何基于多对多相关对象的字段过滤django中的模型?,django,django-models,many-to-many,Django,Django Models,Many To Many,我有两个相互关联的多对多模型。我想根据另一个字段User.created_at筛选其中一个字段Message,与第一个字段Message.edit_date进行比较 class Message(Model): content = CharField(max_length=512, blank=True, null=True) created_at = models.DateTimeField(blank=True, null=True) edit_date = model

我有两个相互关联的多对多模型。我想根据另一个字段User.created_at筛选其中一个字段Message,与第一个字段Message.edit_date进行比较

class Message(Model):
    content = CharField(max_length=512, blank=True, null=True)
    created_at = models.DateTimeField(blank=True, null=True)
    edit_date = models.DateTimeField(blank=True, null=True)
    users = models.ManyToManyField('User', related_name='message_user')

class User(Model):
    name = content = CharField(max_length=48)
    created_at = models.DateTimeField(blank=True, null=True)
现在我通过在两个模型上循环并在循环中比较它们来实现这一点,这很慢

message_query = Message.objects.none()
for user_name, created_at_date in Users.objects.filter(name='Tina').values_list('id', 'created_at').iterator():
    message_query.add(Q(
        users=user_id,
        edit_date__gte=created_at_date,
    ), Q.OR)

messages = Message.objects.filter(message_query)

有没有办法为我试图在查询中筛选的项目创建筛选器?

您可以在相关模型的字段上进行筛选。像这样的方法应该会奏效:

from django.db.models import F

# This will return all messages where one of the associated users
# was created_at before the message edit_date.
Message.objects.filter(
    edit_date__gte=F('users__created_at')
).distinct()

请注意,如果有多个用户为任何给定消息匹配此条件,则此操作将返回重复结果-因此,
distinct()
结束。

您可以在相关模型上的字段上进行筛选。像这样的方法应该会奏效:

from django.db.models import F

# This will return all messages where one of the associated users
# was created_at before the message edit_date.
Message.objects.filter(
    edit_date__gte=F('users__created_at')
).distinct()

请注意,如果有多个用户匹配任何给定消息的此条件,则这将返回重复结果-因此
distinct()
结束。

非常感谢您的回答=)非常感谢您的回答=)