1

一意のオブジェクトを作成したい (同じフィールドを持つ別のインスタンスは存在できませんでした)。このオブジェクトには、一意にする責任がある多対多の関係があります。

オブジェクトはメッセージのスレッドであり、このスレッドは 2 人のユーザー間の会話です (実際には、多対多フィールドを使用しているため、より多くのユーザー間で発生する可能性がありますが、関心があるのは 2 人のユーザー間のみです)。

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'

助言がありますか?

ありがとう。

4

1 に答える 1

1

get_or_createm2m に直接使用することはできません。次のようなことができます。

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
于 2013-06-08T19:34:14.203 に答える