如何将django组字段添加到客户用户注册表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将django组字段添加到客户用户注册表相关的知识,希望对你有一定的参考价值。

我在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, it works fine

Image: With more than one item, 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',
        )
答案

试试这个

from django.contrib.auth.models import Group,User

user_list = User.objects.filter(some_filtering)
group = Group.objects.get(id=group_id)
group.user_set.add(*user_list)

在这里,我假设你有一些逻辑来获取多个用户对象,我存储到user_list变量。它可以作为add()传递给argument list。 注意:user_list可以是list of user instanceslist of user-ids

以上是关于如何将django组字段添加到客户用户注册表的主要内容,如果未能解决你的问题,请参考以下文章

如何将电话号码字段添加到 django UserCreationForm?

将占位符字段添加到基本的 UserCreation Django 注册表单

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

使用 ejabberd 将 nick 字段添加到注册新的 xmpp 用户名

django admin中的外键表单字段

[Django Rest Framework]:如何在注册页面上添加 phone_number 字段?