2012-07-15 25 views
5

içinde kullanıcı yöntemi ile ulaşmanın en etkin yolu Django'da, önerilen kurulumda, UserProfile örneği, Kullanıcı örneğiyle OneToOneField tarafından bağlanır.Kullanıcıya, Django

class UserProfile(models.Model): 
    user = models.OneToOneField(User) 
    data = ... 

Hem kullanıcı hem de kullanıcı profili alma görünümünün en etkili yolu nedir? Bir veritabanı vuruşuyla her iki nesneyi almak için select_related() iç birleştirme sorgusu yapabilir miyim? Yoksa her zaman iki ayrı çağrıya mı geliyor? Muhtemelen, Django'nun auth middleware'i, kullanıcı ismini bile çağrılmadan önce alır… kimse bilmiyor mu?

+1

daha fazla ayrıntı için: profil request.user.userprofile veya request.user.get_profile ile alınabilir(). Ancak, her ikisi de iki veritabanı isabeti ile sonuçlanır. Sorum şu: select_related kullanarak yalnızca bir iç birleştirme sorgusuna indirebilir miyiz ... ve eğer öyleyse: bu "olağan" yoldan daha mı verimli? –

cevap

1

Kullanıcı profili, get_profile() kullanılarak alınabilir.

bakınız belgeleri: https://docs.djangoproject.com/en/dev/topics/auth/#storing-additional-information-about-users

+0

Django bir yerden bahseder, get_profile bunun sonucunu önbelleğe alır, ancak bu tüm isteklerde geçerlidir. Yani gerçekten "user.userprofile" ile karşılaştırıldığında avantaj görmüyorum. Ama beni gerçekten şaşırtan şey, aynı şablonda hem user.get_profile hem de user.userprofile kullanırken, veritabanının iki kez vurulmasıdır. Şimdiye kadar, sürekli olarak user.userprofile ile bağlı kalıyorum. Aynway, her iki yöntemden de alınacak yöntemler 2 veri tabanı isabetiyle sonuçlanıyor: 1x kullanıcı + 1x profili. Seçilmiş bir çağrı, ONE iç birleştirmede yapar. Bu mümkün ve avantajlı mı? –

İlgili konular