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分配與當前(不是新用戶)用戶在他的個人資料中相同的客戶端。
有關如何實現此目的的任何想法?
這樣做的伎倆,謝謝! – borfast