如何基于多对多相关对象的字段过滤django中的模型?
我有两个相互关联的多对多模型。我想根据另一个字段User.created_at筛选其中一个字段Message,与第一个字段Message.edit_date进行比较如何基于多对多相关对象的字段过滤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
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()
结束。非常感谢您的回答=)非常感谢您的回答=)