2015-11-25 49 views
0

好日子SO!Django反向鏈接到onetoonefield成功

最近我開始研究Django,給自己一個情況,我無法在網上找到正確的解決方案來解決它。所以我有一個關於URL倒轉成功的小問題。目前,當用戶成功創建帳戶,用戶被逆轉基於user_ID的個人資料,其中剛剛發佈:

class Create(CreateView): 
    form_class = UserCreateForm # inherits from django's UserCreationForm 

    def get_success_url(self): 
     return reverse('users:profile', kwargs={'pk': self.object.pk}) 

這是正常工作。現在我創建了一個配置文件模塊,其中包含一個OneToOneField 到django.auth.models用戶模型。創建新帳戶時,會向create_profile_on_registration方法發送一個信號。

@receiver(post_save, sender=User) 
def create_profile_on_registration(sender, created, instance, **kwargs): 
    ... 

這也工作正常,在用戶帳戶註冊時創建一個新的配置文件。現在我想將用戶改爲新創建的profile_id而不是user_id。但是,我無法弄清楚如何正確地使這個工作。你能否就我如何解決這個問題給我一點點正確的方向?我無法匹配正確的谷歌搜索詞或找到任何解釋或顯示如何正確實現此目的的示例。

在此先感謝!

+1

你試過'self.object.profile_id'或'self.object.profile.id'嗎? – Alasdair

+0

self.object.profile.id像陽光一樣工作。 Django創造了很好的關係,然後我認爲作品更簡單。謝了哥們! – Nrzonline

+0

很高興爲你工作。我記得現在'self.object.profile_id'將不起作用,因爲它是相反的關係。 – Alasdair

回答

2

當你創建一個one to one field到您的用戶模型,

class Profile(models.Model): 
    user = models.OneToOneField(User) 

可以從輪廓

profile.user 

訪問用戶,您還可以從用戶訪問profile

user.profile 

在你看來,self.object是th e用戶,所以self.object.profile.id會給你配置文件ID。