【发布时间】:2012-12-28 09:26:34
【问题描述】:
我正在使用django 来维护一个消息数据库。
其中,我有以下 模型:
class User(models.Model):
id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=10)
class Message(models.Model):
id = models.IntegerField(primary_key=True)
body = models.CharField(max_length=200)
users = models.ManyToManyField(User)
我正在尝试编写一个实用方法,该方法为给定用户提供与他(和他一个人)相关联的消息。
即为:
m1 = Message(id=1, body='Some body')
m1.save()
m2 = Message(id=2, body='Another body')
m2.save()
m3 = Message(id=3, body='And yet another body')
m3.save()
u1 = User(name='Jesse James')
u1.save()
u2 = User(name='John Doe')
u2.save()
m1.users.add(u1, u2)
m2.users.add(u1)
m3.users.add(u2)
getMessagesFor('Jesse James')
只会返回m2。
假设我在user 中有正确的模型实例,它归结为一行,我尝试了以下这些:
user.message_set.annotate(usr_cnt=Count('users')).filter(usr_cnt__lte=1)
或者:
messages = Message.objects.filter(users__id__in=[user.id])
还有:
messages = Message.objects.filter(users__id__exact=user.id)
还有:
messages = Message.objects.filter(users__contains=user)
等等...我总是同时得到m2 AND m1。
尝试了注释、排除、过滤器等。
有人可以帮我解决这个问题吗?
【问题讨论】:
-
请检查我的答案,它应该可以满足您的需求
标签: python django django-models django-queryset