首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django Modelform OneToOneFielld

Django Modelform OneToOneFielld
EN

Stack Overflow用户
提问于 2017-11-14 00:38:34
回答 2查看 34关注 0票数 0

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

型号代码:

代码语言:javascript
复制
class MyModel(models.Model):
    user = models.OneToOneField(User,related_name="profile",primary_key=True)
    custom_field = models.CharField(...)

当然,该模型更详细,但它显示了整个过程的设置。

示例表单:

代码语言:javascript
复制
First name: [input]
Last name: [input]
Email: [input]
Password: [pass_input]
Custom Text: [text_input]

使用ModelForm可以做到这一点吗?

EN

回答 2

Stack Overflow用户

发布于 2017-11-14 01:27:32

可以;您可以创建一个与MyModel对应的ModelForm

代码语言:javascript
复制
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

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2017-11-14 01:35:17

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

代码语言:javascript
复制
class UserForm(ModelForm):
    class Meta:
        model = User
        fields = ('first_name', 'last_name', 'email')

class ProfileForm(ModelForm):
    class Meta:
        model = MyModel
        fields = ('customfield1', 'customfield2')

EDIT这里有一个很棒的教程可以帮助你做到这一点:https://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47269268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档