我在serializer.py
中使用了此代码 group = Group.objects.get()
group.user_set.add(self.object)
当Group Field只有一个项目并且在DB中添加没有问题时,它可以正常工作。 但是当我在“组列表”字段中添加多个项目时,我收到错误:
get() returned more than one Group -- it returned 2!
我能做什么?
Image:With More than one i am getting This Error
这是我的完整代码:
from rest_framework import serializers
from . import models
from django.contrib.auth import get_user_model
from django.contrib.auth.models import Group
User = get_user_model()
class UserSerializer(serializers.ModelSerializer):
password = serializers.CharField(write_only=True)
confirm_password = serializers.CharField(write_only=True)
def validate(self, data):
if not data.get('password') or not data.get('confirm_password'):
raise serializers.ValidationError("Please enter a password and ""confirm it.")
if data.get('password') != data.get('confirm_password'):
raise serializers.ValidationError("Those passwords don't match.")
return data
def create(self, validated_data):
user = get_user_model().objects.create(
username=validated_data['username'],
first_name=validated_data['first_name'],
last_name=validated_data['last_name'],
email=validated_data['email']
)
group = Group.objects.get()
group.user_set.add(self.object)
user.set_password(validated_data['password'])
user.save()
return user
class Meta:
model = get_user_model()
fields = (
'username',
'password',
'confirm_password',
'first_name',
'last_name',
'email',
'groups',
)
答案 0 :(得分:0)
当您尝试将用户添加到组时,您需要指定要添加用户的特定组。现在if not None:
print('None')
if not False:
print('False')
if not '':
print('empty string')
if not 0:
print('zero')
if not {}:
print('empty/zero length container')
if 'hello':
print('non empty string, truthy test')
失败,有多个组,因为group = Group.objects.get()
只能在只有一个对象与您的查询匹配的情况下使用。如果没有在get()
内指定仅匹配一个查询的查询过滤器,Django ORM将查询get()
模型中的所有内容,如果有更多对象/组,例如Admin和Super Admin,则会失败。
您需要更改此
Group
沿着某些方面
group = Group.objects.get()
然后将新创建的用户添加到名为Admin的组中。