2013-07-20 56 views
1

我有一個ModelForm以允許通過CreateView的子類創建新的User對象,並且我還有一個帶有「客戶端」字段的UserProfile模型,並連接到用戶模型。 此:在ModelForm保存上創建新對象,使用來自相關模型的值

# models.py 
class UserProfile(TimeStampedModel): 
    user = models.OneToOneField(User, unique=True) 
    client = models.ForeignKey(Client) 


# forms.py 
class UserForm(ModelForm): 
    def create_userprofile(self, user, client): 
     profile = UserProfile() 
     profile.user = user 
     profile.client = client 
     profile.save() 

    class Meta: 
     model = User 
     fields = ('email', 'username', 'password', 'first_name', 'last_name', 'groups') 


# views.py 
class UserCreate(LoginRequiredMixin, CreateView): 
    model = User 
    template_name = 'usermanager/user_form.html' 
    form_class = UserForm 
    success_url = reverse_lazy('usermanager:list') 

    def form_valid(self, form): 
     ### Make sure a newly created user has a UserProfile. 

     # some pseudo-code thrown in 

     # First save the user 
     result = super(UserCreate, self).form_valid(form) 

     # Now that we have a user, let's create the UserProfile 
     form.create_userprofile(created_user, current_user.userprofile.client) 

     # Finally return the result of the parent method. 
     return result 

我希望能夠創建表單時提交的(並且是有效的,當然)一個新的用戶配置,所以我是這樣做的CreateView.form_valid()方法,但我需要剛剛創建的用戶的ID,當時我認爲我沒有 - 我嗎?

同時,我需要爲新的UserProfile分配與當前(不是新用戶)用戶在他的個人資料中相同的客戶端。

有關如何實現此目的的任何想法?

回答

1

嘗試檢查,如果

self.object.pk 

有你想要的東西后,你form_valid方法調用

super(UserCreate, self).form_valid(form) 

+1

這樣做的伎倆,謝謝! – borfast

相關問題