Как отобразить поле ManyToMany в RestFramework - PullRequest
0 голосов
/ 12 февраля 2019

Я использую Rest Framework.В моих моделях не отображается job_users, что ManyToManyField.И даже я хочу установить job_created_by вручную, когда данные отправляются пользователем.И также установите Current DateTime для job_created_on

Когда я удаляю job_users = serializers.PrimaryKeyRelatedField(many=True, read_only=True), это дает ошибку -

Ошибка типа в / api / jobs / add / str возвращено не-строка (тип 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)

1 Ответ

0 голосов
/ 12 февраля 2019

вы можете определить 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',
        ]
...