获取查询中的外键对象



我有两个模型。第一个用名称、ID和描述表示不同的项目第二个是用于跟踪哪个用户在哪个项目中。所以我的模型是这样的:

from django.contrib.auth.models import User
# Create your models here.
class Project(models.Model):
id = models.AutoField(db_column = 'db_ID', primary_key = True)
name = models.CharField(max_length=500, default = None)
descriptor = models.CharField(max_length = 1000, null = True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
db_table = 'projects'
def __str__(self):
return self.name


class Userproject(models.Model):
id = models.AutoField(db_column = 'db_ID', primary_key = True)
user = models.ForeignKey(User, on_delete= models.SET_NULL, null = True)
project = models.ForeignKey('Project', on_delete = models.SET_NULL, null = True)
created_at = models.DateTimeField(auto_now_add=True, null=True)
updated_at = models.DateTimeField(auto_now=True, null = True)
class Meta:
db_table = 'UserProjects'
def __str__(self):
return self.id

在Userproject中,只有UserID和ProjectID,它们都是其他模型的外键。

当我获得一个带有用户名的get - request时,我可以获得userID,然后我可以通过userID过滤所有userproject,并序列化所有给定用户所在的项目。但是,如果我还想发送项目的名称,我该如何包含项目数据呢?

因此,您可以运行带有power运算符的查询,以根据外部对象的值过滤数据。

user_projects = Userproject.objects.filter(user_id=user_id, project__name='yourproject')

现在可以使用.操作符从user_project访问项目数据。

if user_projects.exists():
print(user_projects[0].user_id)
print(user_projects[0].project.name)
print(user_projects[0].project.descriptor)

直接从ORM获取值,使用.values()

user_projects = Userproject.objects.filter(user_id=user_id, project__name='yourproject').values('project__name', 'project__descriptor)

这将只获取指定为参数的列。

最新更新