我有自定义用户模型和两个模型,两个用户同时使用ForeinKey:
class Feature1(models.Model):
user1 = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='u1')
user2 = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='u2')
some field....
percentage = models.FloatField()
class Feature2(models.Model):
user1 = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='us1')
user2 = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='us2')
some fields...
property = models.PositiveIntegerField()
然后我检索具有queryset
的特定用户的所有对queryset = Feature1.objects.filter(u1=self.request.user).all().order_by('-percentage')
但我需要的是,来自Feature2模型的此查询集数据(对于每个特定的用户对,如果存在) 并且能够通过Feature2的“属性”命令查询集
怎么做?我研究了django docs,但没有结果。
答案 0 :(得分:1)
首先尝试从第一个关系中获取所有user1s
和user2s
u1 = Feature1.objects.all().values_list('user1', flat=True)
u2 = Feature1.objects.all().values_list('user2', flat=True)
然后从第二个关系中获取与这些用户匹配的Feature2
个对象
queryset = Feature2.objects.filter(user1__in=u1, user2__in=u2).order_by('-percentage')
我还想提供一种替代您的数据库设计,我觉得这将有助于您更有效地查询模型。为什么不更改Feature2
以使其ForeignKey
到Feature1
如此
class Feature2(models.Model):
feature1 = models.ForeignKey(Feature1, verbose_name="Feature 1")
...
然后你可以这样加入这两个
queryset = Feature2.objects.filter(feature1__in=Feature1.objects.filter(u1=self.request.user)).order_by('-percentage')