从 django orm 获取硬查询。 Django 休息框架
Get a hard query from django orm. Django rest framework
我有两个模型,Project 和 ShareProject。我需要列出 ShareProject.user = request.user 的项目。我很困惑如何获得这个查询集。
class Project(models.Model):
name = models.CharField(max_length=16, verbose_name='название', blank=False)
user = models.ForeignKey(User, on_delete=models.CASCADE)
prototype = models.ForeignKey('Prototype', on_delete=models.CASCADE)
colors = jsonfield.JSONField()
class SharedProject(models.Model):
from_user = models.ForeignKey(User, to_field='email', on_delete=models.CASCADE, related_name='from_user')
to_user = models.ForeignKey(User, to_field='email', on_delete=models.CASCADE, related_name='to_user')
project = models.ForeignKey(Project, on_delete=models.CASCADE, related_name='share_project')
permission = jsonfield.JSONField()
all_users = models.BooleanField()
你需要遍历反向关系。请check out the docs,他们提供了大量的信息。
from django.db.models import Q
related_projects = Project.objects.filter(
Q(share_project__to_user=request.user)
| Q(share_project__from_user=request.user)
)
您的问题与您关于 ShareProject.user
的模型不匹配,因此我创建了一个查询集,将两个用户引用组合在一起。我不认为这正是您想要的,但我希望您能够以此为起点。
应该这么简单
projects = [share_project.project for share_project in SharedProject.objects.filter(to_user__id = request.user)]
我有两个模型,Project 和 ShareProject。我需要列出 ShareProject.user = request.user 的项目。我很困惑如何获得这个查询集。
class Project(models.Model):
name = models.CharField(max_length=16, verbose_name='название', blank=False)
user = models.ForeignKey(User, on_delete=models.CASCADE)
prototype = models.ForeignKey('Prototype', on_delete=models.CASCADE)
colors = jsonfield.JSONField()
class SharedProject(models.Model):
from_user = models.ForeignKey(User, to_field='email', on_delete=models.CASCADE, related_name='from_user')
to_user = models.ForeignKey(User, to_field='email', on_delete=models.CASCADE, related_name='to_user')
project = models.ForeignKey(Project, on_delete=models.CASCADE, related_name='share_project')
permission = jsonfield.JSONField()
all_users = models.BooleanField()
你需要遍历反向关系。请check out the docs,他们提供了大量的信息。
from django.db.models import Q
related_projects = Project.objects.filter(
Q(share_project__to_user=request.user)
| Q(share_project__from_user=request.user)
)
您的问题与您关于 ShareProject.user
的模型不匹配,因此我创建了一个查询集,将两个用户引用组合在一起。我不认为这正是您想要的,但我希望您能够以此为起点。
应该这么简单
projects = [share_project.project for share_project in SharedProject.objects.filter(to_user__id = request.user)]