【问题标题】:How to filter django rest framework serializers's drowp down items?如何过滤 django rest 框架序列化程序的下拉项?
【发布时间】:2020-12-19 00:34:03
【问题描述】:

我只想将任务分配给员工。因此,我希望我的 dorpdown 列表应该只显示角色为 is_staff = True 的用户。

但我的下拉列表现在显示了数据库中可用的所有用户(超级用户、权限、General_user)。

如何修改它以仅在下拉列表中显示员工,因为我已经分配了两个具有员工角色的用户...?

我的模型类:

自定义用户模型:

class User(AbstractBaseUser, PermissionsMixin):
    """
    Responsible for handleing App user's data
    """
    email = models.EmailField(max_length=255, unique=True)
    nid = models.CharField(max_length=30, unique=True)
    username = models.CharField(max_length=20, blank=True, null=True)
    date_of_birth = models.DateTimeField(blank=True, null=True)
    first_name = models.CharField(max_length=50, blank=True, null=True)
    last_name = models.CharField(max_length=50, blank=True, null=True)
    image = models.FileField(
        upload_to=FileManager.photo_path, null=True, blank=True)
    is_active = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)
    is_staff = models.BooleanField(default=False)
    is_authority = models.BooleanField(default=False)
    is_specialist = models.BooleanField(default=False)
    is_general_user = models.BooleanField(default=False)

    timestamps = models.DateTimeField(auto_now_add=True)
    update = models.DateTimeField(auto_now=True)

    objects = user_manager.UserManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['nid']

任务模型

class Task(BaseAbstractModel):
    '''
    Responsible for Storing and Providing Tasks data
    '''
    assignment = models.ForeignKey(Assignment,
                                   on_delete=models.DO_NOTHING,
                                   related_name='+')
    assigne_to = models.ForeignKey(User,
                                   on_delete=models.DO_NOTHING,
                                   related_name='+')

    task_name = models.CharField(max_length=300)
    is_done = models.BooleanField(default=False)

    created_by = models.ForeignKey(User,
                                   on_delete=models.DO_NOTHING,
                                   related_name='created_by')

序列化器:

class TaskListSerializer(serializers.ModelSerializer):
    '''
    Will be serializing Task's data
    '''

    created_by = UserListSerializer(read_only=True)

    class Meta:
        model = Task
        fields = ('assignment',
                  'assigne_to',
                  'task_name',
                  'is_done',
                  'created_by',)

通用创建视图

class CreateTaskView(generics.CreateAPIView):
    queryset = Task.objects.all()
    serializer_class = TaskListSerializer

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    尝试将PrimaryKeyRelatedFieldqueryset 参数一起使用:

    class TaskListSerializer(serializers.ModelSerializer):
        '''
        Will be serializing Task's data
        '''
    
        created_by = UserListSerializer(read_only=True)
        assigne_to = serializers.PrimaryKeyRelatedField(queryset=User.objects.filter(is_staff=True))
    
        class Meta:
            model = Task
            fields = ('assignment',
                      'assigne_to',
                      'task_name',
                      'is_done',
                      'created_by',)
    

    【讨论】:

      猜你喜欢
      • 2016-05-14
      • 2015-05-11
      • 2020-12-22
      • 2015-04-03
      • 1970-01-01
      • 2021-02-17
      • 1970-01-01
      • 2017-10-03
      • 2019-05-20
      相关资源
      最近更新 更多