4

假设以下模型类,

 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)

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

4

2 回答 2

8

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

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

于 2012-12-23T14:03:17.217 回答
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
于 2012-12-23T13:19:46.423 回答