首页 > 解决方案 > “ManyRelatedManager”类型的对象不是 JSON 可序列化的

问题描述

我正在开发一个虚拟应用程序,在这里我想从 MuUser 模型中选择多个 user_name 并将其返回给 Sessions 模型。在执行此操作时,我收到此错误

这是我的代码

我的 MyUser 模型

MyUser 类(AbstractBaseUser):

email = models.EmailField(
    verbose_name='email address',
    max_length=255,
    unique=True)
user_name=models.CharField(max_length=10,blank=True,null=True,unique=True)
date_of_birth=models.DateField(null=True,blank=True) 
mobile_number=models.CharField(max_length=20,blank=True,null=True)
address=models.CharField(max_length=100,blank=True,null=True)
country=models.CharField(max_length=20,blank=True,null=True)
joining_date=models.DateField(null=True,blank=True)

Rating_CHOICES = (
(1, 'Poor'),
(2, 'Average'),
(3, 'Good'),
(4, 'Very Good'),
(5, 'Excellent')
)
Rating=models.IntegerField(choices=Rating_CHOICES,default=1)

is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)

objects = MyUserManager()

USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['date_of_birth']

def __str__(self):
    return str(self.user_name)

def has_perm(self, perm, obj=None):
    return True

def has_module_perms(self, app_label):
    return True

@property
def is_staff(self):
    return self.is_admin

我的会话模型

类会话(模型。模型):

Host=models.ForeignKey(MyUser,on_delete=models.CASCADE,related_name='host')
game=( 
    ('cricket','cricket'),
    ('football','football'),
    ('basketball','basketball'),
    ('hockey','hockey'),
    ('gym','gym'),
    ('baseball','baseball'),
)

Sport=models.CharField(max_length=20,choices=game)   
SPORT=(
    ('Indoor','Indoor'),
    ('Outdoor','Outdoor'),
)
Sports_category=models.CharField(max_length=10,choices=SPORT)
SESSIONS=(
    ('General','General'),
    ('Business','Business'),
)
Session_category=models.CharField(max_length=15,choices=SESSIONS)
TYPE=(
    ('Paid','Paid'),
    ('Free','Free'),
)
Session_type=models.CharField(max_length=10,choices=TYPE)
Created=models.DateField(null=True,blank=True)
Session_Date=models.DateField(null=True,blank=True)
Location=models.ForeignKey(MyUser,related_name='street',on_delete=models.CASCADE)
Player=models.CharField(max_length=100,blank=False)
Start_time=models.TimeField(auto_now=False, auto_now_add=False)
End_time=models.TimeField(auto_now=False, auto_now_add=False)
Duration=models.CharField(max_length=30,blank=False)
status=(
    ('1','Active'),
    ('2','UnActive'),

)
Status=models.CharField(max_length=20,choices=status)
Equipment=models.TextField()
Duration=models.CharField(max_length=20,blank=False)
#Level=models.ForeignKey(IntrestedIn,blank=True,on_delete=models.CASCADE)
GENDER=(
    ('Male','Male'),
    ('Female','Female'),
    ('Male and Female','Male and Female'),
    ('Other','Other'),   
)
Gender=models.CharField(max_length=20,choices=GENDER    ,blank=True)
Fee=models.CharField(max_length=50,blank=True,default='0')
Players_Participating=models.ManyToManyField(MyUser,blank=True)
def __str__(self):
    return str(self.Host)

类 SessionViewSet(viewsets.ViewSet):

def create(self, request):
    try:

        Host= request.data.get('Host')
        Sport = request.data.get('Sport')
        Sports_category = request.data.get('sports_category')
        #Location = request.data.get('Location')
        Session_category = data.get('session_category')
        Session_type=data.get('session_type ')
        Created=data.get('Created')
        Session_Date=data.get('Session_Date')
        Location=request.data.get('Location')
        Start_time=request.data.get('Start_time')
        End_time=request.data.get('End_time')
        Duration=request.data.get('Duration')
        Level=request.data.get('Level')
        Player=request.data.get('Player')
        Gender=request.data.get('Gender')
        Fee=request.data.get('Fee')
        Equipment=request.data.get('Equipment')
        Players_Participating=request.data.get('Players_Participating')
        new=Session()

        new.Host=MyUser.objects.get(user_name=Host)
        new.Sport=Sport
        new.Sports_category=sports_category
        new.Session_category=session_category
        new.Session_type=session_type
        new.Created=Created
        new.Session_Date=Session_Date
        new.Location=MyUser.objects.get(address=Location)
        new.Start_time=Start_time
        new.End_time=End_time
        new.Duration=Duration
        new.Level=IntrestedIn.objects.get(Level=Level)
        new.Player=Player
        new.Equipment=Equipment
        #new.Players_Participating=MyUser.objects.all(user_name=Players_Participating)
        new.Players_Participating=Players_Participating
        new.save()
        return Response({'Submitted Successfully':True})
    except Exception as error:
        return Response({"message": str(error), "success": False},
         status=status.HTTP_200_OK)

def list(self, request):
    try:
        search = request.GET.get('search')
        sport=request.GET.get('sport')
        if search:
            users = Session.objects.filter(Host__user_name=search)
            ashu=users.count()
            page = request.GET.get('page')
            paginator = Paginator(users,1)
            try:
                user = paginator.page(page)
            except PageNotAnInteger:
                user = paginator.page(1)
            except EmptyPage:
                user = paginator.page(paginator.num_pages)
            use = []

            for user in users:
                use.append({
                    'Host':user.Host.user_name,
                    'Sport':user.Sport,
                    'Sports_category':user.Sports_category,
                    'Session_category':user.Session_category,
                    'Session_type':user.Session_type,
                    'Created':user.Created,
                    'Session_Date':user.Session_Date


                    })
            return Response({'output':use,'Session Created':ashu})
        if sport:
            users = Session.objects.filter(Sport=sport)
            page = request.GET.get('page')
            paginator = Paginator(users,1)
            try:
                user = paginator.page(page)
            except PageNotAnInteger:
                user = paginator.page(1)
            except EmptyPage:
                user = paginator.page(paginator.num_pages)
            use = []

            for user in users:
                use.append({
                    'Host':user.Host.user_name,
                    'Sport':user.Sport,
                    #'Sports_category':user.Sports_category,
                    #'Session_category':user.Session_category,
                    #'Session_type':user.Session_type,
                    #'Created':user.Created,
                    #'Session_Date':user.Session_Date


                    })
            return Response({'out':use})

        else :
            users = Session.objects.all()
            page = request.GET.get('page')
            paginator = Paginator(users,1)
            try:
                user = paginator.page(page)
            except PageNotAnInteger:
                user = paginator.page(1)
            except EmptyPage:
                user = paginator.page(paginator.num_pages)
            use = []

            for user in users:
                use.append({
                   'Host':user.Host.user_name,
                   'Sport':user.Sport,
                   'Sports_category':user.Sports_category,
                   'Session_category':user.Session_category,
                   'Session_type':user.Session_type,
                   'Created':user.Created,
                   'Session_Date':user.Session_Date,
                   "Players_Participating":user.Players_Participating,

                    })
        return Response({"success":True, "users":use, "pages":paginator.num_pages})

    except Exception as error:
        traceback.print_exc()
        return Response({"message": str(error), "success": False}, status=status.HTTP_200_OK)

标签: django

解决方案


推荐阅读