2014-03-13 96 views
1

我有一個模型,這是關係到User modelForeign key獲取從相關的模型數據外鍵

class UserProfile(models.Model): 
    user  = models.ForeignKey(User) 
    gender  = models.CharField(max_length=10) 
    credits  = models.IntegerField() 
    ... 

現在我想獲取用戶數據,並且爲了這個,我不喜歡這樣的:

profile = user.userprofile_set.select_related() 

現在來自個人資料變量我有UserProfile模型中的所有數據,但不是來自User模型例如,我有gender , credits等但不包括user email, name等來自User model.But我想要所有的用戶相關的信息,我知道request參數將有User instance但後來我可能會面臨與外鍵相關的其他模型相同的問題。

所以,請讓我知道以最合適的方式獲取UserForeign key相關的數據的最佳途徑。

感謝

回答

1

當您使用此:

print profile.user.email ## Won't execute second query 

現在你可以:

profile = UserProfile.objects.select_related('user').get(pk = <pk of userprofile instance>) 

它不會當你從user表中獲取數據這樣上執行第二個查詢全部或特定領域使用model_to_dict

from django.forms.models import model_to_dict 
print model_to_dict(profile.user, fields=[], exclude=[]) ## All information of user relation. 
+0

它給出的錯誤'QuerySet'對象沒有屬性'_meta',我認爲它是因爲model_to_dict()需要對象和配置文件不是一個對象也select_related不能與get()一起使用,我需要獲取配置文件供Particuler使用和如果我用戶filter()的相同的錯誤來。 – Inforian

+0

我想你可以使用'select_related'和'get()'。 https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.select_related –

+0

是的,在select_related()沒有之前,我的錯誤 – Inforian