【问题标题】:Django Modelform OneToOneFielldDjango Modelform OneToOneField
【发布时间】:2017-11-13 16:38:33
【问题描述】:

我目前正在 Django 中编写一个系统,我想在创建另一个模型的同时保存一个用户。

型号代码:

class MyModel(models.Model):
    user = models.OneToOneField(User,related_name="profile",primary_key=True)
    custom_field = models.CharField(...)

模型当然更精细,但它显示了整个事物的设置。

示例形式:

First name: [input]
Last name: [input]
Email: [input]
Password: [pass_input]
Custom Text: [text_input]

这完全可以使用 ModelForm 吗?

【问题讨论】:

    标签: python django django-forms modelform


    【解决方案1】:

    是的;你可以创建一个对应于MyModelModelForm

    class MyModelForm(forms.ModelForm):
        class Meta:
            model = MyModel
            fields = ['custom_field']
    

    然后在您看来,您可以使用commit=False (https://docs.djangoproject.com/en/1.11/topics/forms/modelforms/#the-save-method) 中断此表单的保存,并手动设置新对象的user 值。例如,您可以像这样设置user = request.user

    if form.is_valid():
        instance = form.save(commit = False)
        instance.user = request.user 
        instance.save()
        form.save_m2m() #if your form has any m2m data to save
    

    【讨论】:

      【解决方案2】:

      是的。在您的 forms.py 文件中,添加以下代码:

      class UserForm(ModelForm):
          class Meta:
              model = User
              fields = ('first_name', 'last_name', 'email')
      
      class ProfileForm(ModelForm):
          class Meta:
              model = MyModel
              fields = ('customfield1', 'customfield2')
      

      编辑 这是一个很棒的教程:https://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html

      【讨论】:

        猜你喜欢
        • 2015-03-06
        • 2014-09-23
        • 1970-01-01
        • 2016-07-01
        • 2013-05-15
        • 2020-08-13
        • 2014-04-30
        • 1970-01-01
        • 2014-09-15
        相关资源
        最近更新 更多