2017-01-19 116 views
1

有一個模型「用戶」和「匹配」,此第二個模型用於始終連接2個用戶。我正在嘗試搜索具有兩個特定用戶的「匹配」。準確檢索記錄ManyToManyField

class User(models.Model): 
    uuid = models.UUIDField(default=uuid.uuid4, primary_key=True, editable=False, db_index=True) 
    email = models.EmailField(_('email address'), blank=False, unique=True, db_index=True) 

class Match(models.Model): 
    uuid = models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True) 
    users = models.ManyToManyField(User, related_name='matches') 

最初的想法是使用update_or_create,我發現這是不可能的。所以我去了get_or_create,但現在我嘗試了一個簡單的過濾器。

我得到的最大的是重複匹配模式的價值(獲得2個結果與相同的值)

測試1

query = reduce(operator.or_, (Q(users__user__uuid=item) for item in LIST)) 
result = Match.objects.filter(query) 

數:0

測試2

test = Match.objects.filter(users__user__in=LIST)) 

計數:0

試驗3

test = Match.objects.filter(users__in=LIST) 

計數:2(重複)


LIST = FUNCTION:

def list_uuid(user1, user2): 
    return {str(user.uuid), str(user2.uuid)} 

回答

1

試試:

qs = Match.objects.filter(uuid__in=user1.matches.all(), users=user2)