Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django Rest框架“;“我的用户”&引用;此字段必填_Python_Django_Django Rest Framework - Fatal编程技术网

Python Django Rest框架“;“我的用户”&引用;此字段必填

Python Django Rest框架“;“我的用户”&引用;此字段必填,python,django,django-rest-framework,Python,Django,Django Rest Framework,我正在学习DRF,现在我遇到了一个问题,这个问题已经困扰了我好几天了。这个应用程序是一个zumba类应用程序,我正在使用DRF在上面创建一个API。我现在试图构建的部分是用户可以将自己添加到zumba类(因此,他必须能够更新许多字段)的部分。当用户将自己注册到类(PUT或PATCH)时,我希望API做的是获取他的用户名(我们从身份验证中获得),并将他添加到“myusers”字段。但由于PUT是空的,API不断抱怨需要“myusers” 有没有办法告诉API PUT请求中不需要“myusers”,

我正在学习DRF,现在我遇到了一个问题,这个问题已经困扰了我好几天了。这个应用程序是一个zumba类应用程序,我正在使用DRF在上面创建一个API。我现在试图构建的部分是用户可以将自己添加到zumba类(因此,他必须能够更新许多字段)的部分。当用户将自己注册到类(PUT或PATCH)时,我希望API做的是获取他的用户名(我们从身份验证中获得),并将他添加到“myusers”字段。但由于PUT是空的,API不断抱怨需要“myusers”

有没有办法告诉API PUT请求中不需要“myusers”,因为它是从身份验证令牌提取的?(如果我手动创建一个PUT请求,其中正文中包含
“myusers”:[{“id”:9}]
,它可以工作,但我希望避免添加客户端,因为传递的数据甚至没有被使用。)

序列化程序(所有只读字段用于确保用户无法更新它们):

景色

class ActivityViewSet(viewsets.ModelViewSet):
    permission_classes = [permissions.IsAuthenticated]
    queryset = Activity.objects.all()
    lookup_field = 'id'

    def get_serializer_class(self):
        if self.request.user.is_staff or self.action == 'create':
            return AdminActivityClassesSerializer
        else:
            return UserActivityClassesSerializer

    def perform_update(self, serializer):
        instance = self.get_object()
        request = serializer.context['request']
        auth_user = request.user
        qs = instance.myusers.filter(id=auth_user.id)#we verify is the user is already registered, and if yes, we remove him
        if qs:
            print('delete')
            instance.myusers.remove(auth_user)
            return instance
        else:
            result = verify_valid_season_pass(auth_user, instance)
            if result == 1:
                print('add')
                instance.myusers.add(auth_user.id)
            else:
                raise serializers.ValidationError("No valid seasonpass found.")
要更新的模型:

class Activity(models.Model):
    CLOSE = 0
    OPEN = 1
    ACTIVITY_STATUS_CHOICES = [
        (CLOSE, 'Closed'),
        (OPEN, 'Open'),
    ]
    name            = models.CharField('Activity Name', max_length=64, blank=False, null=False)
    date            = models.DateTimeField('Start Date & Time', blank=False, null=False)
    activitytype    = models.ForeignKey(ActivityType, blank=False, null=False, default=1, on_delete=models.DO_NOTHING)
    status          = models.IntegerField('Status', choices=ACTIVITY_STATUS_CHOICES, default=OPEN,)  # 1 = open, 0 = closed
    myusers         = models.ManyToManyField("users.User")

    def __str__(self):
        return self.name
有什么线索吗?

你试过了吗


myusers=MyUsersSerializer(many=True,required=False)

非常简单。我仍在学习,有时解决方案非常简单谢谢
class Activity(models.Model):
    CLOSE = 0
    OPEN = 1
    ACTIVITY_STATUS_CHOICES = [
        (CLOSE, 'Closed'),
        (OPEN, 'Open'),
    ]
    name            = models.CharField('Activity Name', max_length=64, blank=False, null=False)
    date            = models.DateTimeField('Start Date & Time', blank=False, null=False)
    activitytype    = models.ForeignKey(ActivityType, blank=False, null=False, default=1, on_delete=models.DO_NOTHING)
    status          = models.IntegerField('Status', choices=ACTIVITY_STATUS_CHOICES, default=OPEN,)  # 1 = open, 0 = closed
    myusers         = models.ManyToManyField("users.User")

    def __str__(self):
        return self.name