Как создать уникальный объект для модели Django с полем "многие ко многим"?
Я хочу создать уникальный объект (не может существовать другой экземпляр с такими же полями). Этот объект имеет отношение многие ко многим, что делает его уникальным.
Объект представляет собой поток сообщений, и этот поток представляет собой диалог между двумя пользователями (на самом деле это может быть разговор между несколькими пользователями, поскольку я использую поле "многие ко многим", но меня интересуют только два пользователя).
class Thread(models.Model):
users = models.ManyToManyField(User, null=True,blank=True, related_name='threads')
class Mensaje(models.Model):
thread = models.ForeignKey(Thread, related_name='mensajes')#messages
Когда пользователь отправляет сообщение другому пользователю, если поток не существует, он будет создан, и, если он существует, сообщения будут связаны с этим потоком.
Я пытаюсь что-то подобное:
thread = Thread.objects.get_or_create( users= [user1, user2])
Но у меня есть следующее исключение:
Exception Value: int() argument must be a string or a number, not 'list'
Какие-либо предложения?
Благодарю.
1 ответ
Вы не можете использовать get_or_create
прямо за м2. Вы можете сделать что-то вроде этого:
user_list = [user1, user2]
thread_qs = Thread.objects.filter(users=user_list[0])
for user in user_list[1:]:
thread_qs= thread_qs.filter(users=user)
try:
thread = thread_qs.get() #get if only one object.
except MultipleObjectsReturned as e:
print 'Multiple Objects Returned'
except ObjectDoesNotExist: #create object if does not exist
thread = Thread.objects.create()
thread.users.add(user_list)
thread.save() #this might be redundant