django:从外键获取对象

时间:2012-12-23 13:17:30

标签: django model

假设有以下模型类,

 class Bookmark(models.Model):   
     owner = models.ForeignKey(UserProfile,related_name='bookmarkOwner')
     parent = models.ForeignKey(UserProfile,related_name='bookmarkParent')
     sitter = models.ForeignKey(UserProfile,related_name='bookmarkSitter')

如何从sitter对象中获取owner个对象?

user = UserProfile.objects.get(pk=1)

UserProfile.objects.filter(bookmarkOwner=user)

返回空tuple,我无法指定sitter变量。

2 个答案:

答案 0 :(得分:3)

我相信你可以做这样的事情,如果你想避免使用循环:

pks = some_user_profile.bookmarkOwner.values_list('sitter', flat=True)
sitters = UserProfile.objects.filter(pk__in=pks).all()

或者,您可能希望尝试设置多对多字段并使用through参数。请参阅Django文档:https://docs.djangoproject.com/en/2.0/ref/models/fields/#manytomanyfield

答案 1 :(得分:2)

你应该做

objs = Bookmark.objects.filter(owner=user)
# This will return all bookmarks related to the user profile.

for obj in objs:
    print obj.owner # gives owner object
    print obj.parent # gives parent object
    print obj.sitter # gives sitter object

如果用户配置文件只有一个Bookmark对象(没有多个条目)。然后你应该使用.get方法(返回单个对象)。

obj = Bookmark.objects.get(owner=user)
print obj.owner
print obj.parent
print obj.sitter