对于帐户类型,我使用AbstractUser来构建我的模型
class Profile(AbstractUser):
pass
class Second(Profile)
#fields here
class Third(Profile)
#fields here
相应的表格如下
class UserForm(ModelForm):
class Meta:
model = User
fields = ('username', 'email', 'password')
class SecondForm(ModelForm):
class Meta:
model = Artist
fields = ('artist_name', 'music_genre', 'profile_image')
我不知道这是定义模型功能的正确方法
我现在的问题是如何创建用户包括second model
或Third model
字段。
我有HTML
页面,用户可以选择要创建的帐户USerType
..
def letsadduser(request):
if request.method == "POST":
form = UserForm(request.POST)
form_second = SecondForm(request.POST, request.FILES)
if form.is_valid() and form_second.is_valid():
User = get_user_model()
new_user = User.objects.create_user(**form.cleaned_data)
Second_user = Second()
Second_user.artist_name = request.POST['artist_name']
Second_user.music_genre = request.POST['music_genre']
Second_user.profile_image = request.FILES['profile_image']
new_user.save()
Second_user.save()
#login(request, new_user)
return render_to_response('welcome.html')
else:
form = UserForm()
form_second = SecondForm()
return render(request, 'registration/test.html', {'form_second': form_second, 'form':form})
错误(1062,"重复输入''用于键'用户名'")现在抛出。 但它创建用户,我觉得第二种形式不起作用.. 如何解决这个错误?
答案 0 :(得分:1)
我看到了这些线条,并且非常注意到你遇到的问题:
class Profile(AbstractUser):
pass
class Second(Profile)
#fields here
class Third(Profile)
#fields here
创建用户时:
User = get_user_model()
new_user = User.objects.create_user(**form.cleaned_data)
您正在创建用户。
创建第二个用户时:
Second_user = Second()
Second_user.artist_name = request.POST['artist_name']
Second_user.music_genre = request.POST['music_genre']
Second_user.profile_image = request.FILES['profile_image']
Second_user.save()
您未填充username
字段。 也许您至少运行此代码两次,并且数据库中存在空用户记录。
然而,最重要的问题不是你问的问题。最大的问题如下:
create
。创建用户条目。save
。 创建另一个用户条目,并创建第二个条目。save
d用户上冗余地致电create
。此通话无效。因此,您要创建两个用户条目。如果您想让一个用户拥有两个配置文件,则必须修复该模型。目前你有:
class Profile(AbstractUser):
pass
class Second(Profile)
#fields here
class Third(Profile)
#fields here
如果您没有向AbstractUser添加字段:为什么不使用默认用户? (只是方便;不是修复的一部分)。
User = get_user_model()
您需要制作个人资料,而不是子级,因此用户可能属于两个个人资料。这是一个完全不同的OOP概念。所以这个问题不是关于Django而是关于OOP。
class Second(Model):
user = ForeignKey(User, ...params...)
...fields...
class Third(Model):
user = ForeignKey(User, ...params...)
...fields...
您需要修复您的呼叫以使用第二个配置文件实例化用户:
User = get_user_model()
new_user = User.objects.create_user(**form.cleaned_data)
Second_user = Second()
Second_user.user = new_user
Second_user.artist_name = request.POST['artist_name']
Second_user.music_genre = request.POST['music_genre']
Second_user.profile_image = request.FILES['profile_image']
Second_user.save()
为了上帝的缘故让你的观点成为原子/交易!您正在添加多条记录。