2013-10-30 40 views
5

Django projemde her django kullanıcısı için bir profilim var ve profil bir bilgi modeliyle ilgilidir. Her iki ilişki de OneToOne. Çoğu zaman hem kullanıcı için Profil hem de Bilgi modellerini kullanıyorum, varsayılan olarak bunların seçilmesini istiyorum, böylece veritabanına tekrar vurmam. Django kimlik doğrulaması kullanarak bunu yapmak için herhangi bir yolu var mı?Otomatik olarak OneToOne alanıyla ilgili olarak seçin

cevap

0

Özel kullanıcı modeli için django> = 1.5 kullanın İlgili işlevsellik seçin.

user = User.objects.select_related('profile_related', 'info_related') 
0

Bunun bir süredir burada olduğunu biliyorum ancak başka birinin benzer bir durumla karşı karşıya kalması durumunda çözümümümü ekliyorum.

class ProfileManager(models.Manager): 
    # use_for_related_fields = True 
    def get_queryset(self): 
     return super(ProfileManager, self).get_queryset().select_related('user') 

: Django (v1.8 ve hatta v1.7 itibariyle) Sen Profil için böyle bir yönetici olabilir

özelleştirilmiş yöneticileri (sorgularken kullanılacak .objects) yapmanızı sağlar Sonra modelde:

class Profile(models.Model): 
user = models.OneToOneField(
    User, 
    primary_key=True, 
    on_delete=models.CASCADE 
    ) 

# your fields ... 

# the manager 
objects = ProfileManager() 

# ... 

Sonra Profil tüm sorgular da otomatik olarak ilgili kullanıcıyı seçecektir. Bu kodu, Bilgi modelini de içerecek şekilde genişletebilirsiniz.

İyi şanslar!

İlgili konular