2012-12-23 59 views
0

假设下的模型类获取对象,Django的:从外键

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

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

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/dev/ref/models/fields/#manytomanyfield

+0

在'sitters = UserProfile.objects.filter(pk__in = pks).all()'末尾不需要'.all –

1

你应该做的

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 

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

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

谢谢。但是,有没有其他方式不使用循环? –

+0

书签表是否只包含一个与配置文件相关的Bookmark对象? –

+0

是的,父母可以有很多书签,可以有多个书签,但是对于一个父母 - 一个保姆对,只有一个书签 –