Я использую 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
И m1
.
Пробовал аннотации, исключает, фильтрует и т. Д.
Может кто-то помочь мне с этим?