gpt4 book ai didi

python - 从 2 个或多个模型合并 Django Admin 中的 "add"表单(以一对一关系连接)

转载 作者:太空狗 更新时间:2023-10-30 02:51:30 25 4
gpt4 key购买 nike

我有一个 Django 的默认 UserCreationForm 通过管理应用程序添加一个新用户。我想从另一个名为 UserProfile 的自定义模型中添加新字段。 UserProfile 与 Django 的 User 模型具有一对一的关系。 UserProfile 模型的附加字段有电话号码公司名称等。

在从管理面板创建新用户时,有没有一种方法可以将 UserProfile 表单与 Django 的默认 User 表单合并?

我查看了 Django 的文档 here在内联表格上,但似乎它们需要外键关系。

Django 2.1

最佳答案

假设您的 Profile 带有额外的字段 phone_number。像这样

class Profile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
phone_number = models.CharField(max_length=24)

您可以按照以下步骤在 Admin 的 UserCreationForm 中添加额外的字段。

<强>1。创建自定义 UserCreationForm

继承自 UserCreationForm 并添加额外的字段和功能。

from django import forms
from django.contrib.auth.forms import UserCreationForm
from account.models import Profile

class UserWithProfileCreationForm(UserCreationForm):
phone_number = forms.CharField(max_length=32)

def save(self, commit=True):
instance = super().save(commit=True)
profile = Profile(user=instance, phone_number=self.cleaned_data['phone_number'])
profile.save()
return instance

<强>2。注销(已注册)User 模型并使用自定义表单和字段再次注册

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User

# unregister first
admin.site.unregister(User)


@admin.register(User)
class UserWithProfileAdmin(UserAdmin):
add_form = UserWithProfileCreationForm
add_fieldsets = (
(None, {
'classes': ('wide',),
# add any custom fields here
'fields': ('username', 'password1', 'password2', 'phone_number'),
}),
)

关于python - 从 2 个或多个模型合并 Django Admin 中的 "add"表单(以一对一关系连接),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55614022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com