gpt4 book ai didi

python - (扩展)用户表格

转载 作者:太空宇宙 更新时间:2023-11-04 00:54:26 25 4
gpt4 key购买 nike

我扩展了我的用户模型并添加了一些额外的字段。我希望能够通过网络界面(而不是管理页面)添加新用户,因此它需要某种形式。我如何在数据库中创建这个新用户以及表单是什么样的?

class MyUser(models.Model):
user = models.OneToOneField(User)
custcode = models.CharField(max_length=30)

//这显然行不通,但这是一个开始

from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User

class UserCreateForm(UserCreationForm):

class Meta:
model = User
fields = ('username', 'custcode')

最佳答案

由于您有两个模型,因此需要两个表单。

auth.User 一个表单,yourapp.MyUser 一个表单。

在您看来,您将:

  1. 实例化两种形式
  2. 检查两种形式是否有效
  3. 保存用户表单
  4. 使用 user.pk 保存 MyUser 表单

这应该给出类似的东西

class MyUserCreationForm(forms.ModelForm):
class Meta:
model = User
exclude = ('user',)
# Exclude 'user' because we will set it manually

class MyView(View):

def get(self, request):
user_form = UserCreationForm(prefix='user')
myuser_form = MyUserCreationForm(prefix='myuser')
# Use prefix to avoid name conflicts
return render(...)

def post(self, request):
user_form = UserCreationForm(request.POST, prefix='user')
myuser_form = MyUserCreationForm(request.POST, prefix='myuser')
user_form_is_valid = user_form.is_valid()
myuser_form_is_valid = myuser_form.is_valid()
# Do form.is_valid() here in order to always call both
if user_form_is_valid and myuser_form_is_valid:
user = user_form.save()
myuser = myuser_form.save(commit=False)
myuser.user = user
myuser.save()
...
...
return ...

为了保持一致性,表单保存也应该包含在事务中。但这是另一个话题。

关于python - (扩展)用户表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35697731/

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