如何将组字段添加到自定义用户?

时间:2018-03-03 20:51:38

标签: django django-models django-forms django-rest-framework django-views

我在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:For one item Work Fine

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',
        )

1 个答案:

答案 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的组中。