如何在Rest框架中显示ManyToMany字段

问题描述 投票:0回答:1

我正在使用Rest Framework。它没有在我的模型中显示job_users,这是ManyToManyField。甚至我想在用户发送数据时手动设置job_created_by。并为job_created_on设置当前日期时间

当我删除job_users = serializers.PrimaryKeyRelatedField(many=True, read_only=True)它给出错误 -

/ api / jobs / add / str中的TypeError返回非字符串(类型NoneType)

class JobsAddAPIView(generics.CreateAPIView):
        queryset = Jobs.objects.all()
        serializer_class = JobAddSerialzer
        permission_classes = [IsAuthenticated]

class JobAddSerialzer(serializers.ModelSerializer):

    job_users = serializers.PrimaryKeyRelatedField(many=True, read_only=True)

    class Meta:
        model = Jobs
        fields = [  
            'job_name', 
            'job_number',
            'job_description',
            'job_start_date',
            'job_start_time',
            'job_end_date',
            'job_end_time',
            'job_group',
            'job_users',
            'job_status',
        ]

class Jobs(models.Model):
    job_company = models.ForeignKey(Company, on_delete=models.CASCADE)
    job_group = models.ForeignKey(Groups, on_delete=models.CASCADE)
    job_users = models.ManyToManyField(User,related_name='job_users', blank=True)
    job_name = models.CharField(max_length=30)
    job_number = models.CharField(max_length=30)
    job_description = models.CharField(max_length=100, blank=True, null=True)
    job_start_date = models.DateField(blank=True, null=True)
    job_start_time = models.TimeField(blank=True, null=True)
    job_end_date = models.DateField(blank=True, null=True)
    job_end_time = models.TimeField(blank=True, null=True)
    job_created_on = models.DateTimeField(auto_now_add=True)
    job_created_by = models.ForeignKey(User, on_delete=models.CASCADE, related_name='job_created_bys')
    job_updated_on = models.DateTimeField(auto_now=True)
    job_updated_by = models.ForeignKey(User, on_delete=models.CASCADE, related_name='job_updated_bys')
    job_is_deleted = models.BooleanField(default=False)
    job_deleted_at = models.DateTimeField(blank=True, null=True)
django django-rest-framework
1个回答
0
投票

你可以定义一个serializer_field到另一个serailizer。哪个将填充manytomany字段。

class UserSerialzer(serializers.ModelSerializer):
      # your user serializer

class JobAddSerialzer(serializers.ModelSerializer):

    job_users = UserSerializer(many=True, read_only=True)

    class Meta:
        model = Jobs
        fields = [  
            'job_name', 
            'job_number',
            'job_description',
            'job_start_date',
            'job_start_time',
            'job_end_date',
            'job_end_time',
            'job_group',
            'job_users',
            'job_status',
        ]
© www.soinside.com 2019 - 2024. All rights reserved.