【问题标题】:Create new object on ModelForm save, with values from related model使用来自相关模型的值在 ModelForm 保存上创建新对象
【发布时间】:2013-07-20 20:09:29
【问题描述】:

我有一个 ModelForm 允许通过 CreateView 的子类创建新的 User 对象,我还有一个带有“client”字段的 UserProfile 模型,并连接到 User 模型。 这个:

# 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

我希望能够在提交表单时创建一个新的 UserProfile(当然是有效的),所以我在 CreateView.form_valid() 方法上执行此操作,但我需要刚刚创建的 ID用户,当时我认为我没有 - 是吗?

同时,我需要将与当前(而非新)用户在其个人资料中的客户端相同的客户端分配给新的 UserProfile。

关于如何实现这一点的任何想法?

【问题讨论】:

    标签: django django-models django-forms


    【解决方案1】:

    尝试检查是否

    self.object.pk 
    

    调用后有你想要的

    super(UserCreate, self).form_valid(form)
    

    在你的 form_valid 方法中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多