假设有以下模型类,
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
变量。
答案 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