Python Django REST:&x27;请求';对象没有属性';字段名称';

Python Django REST:&x27;请求';对象没有属性';字段名称';,python,django,django-rest-framework,Python,Django,Django Rest Framework,我正在尝试创建一个职位申请,以便将一份工作申请添加到申请者列表中。这是由POST/task worker/ 但是,我得到了一个错误: “请求”对象没有“任务”属性 型号.py class Task_worker(models.Model): worker = models.ForeignKey(Worker) task = models.ForeignKey(Task) class Meta: unique_together = ('worker', '

我正在尝试创建一个职位申请,以便将一份工作申请添加到申请者列表中。这是由
POST/task worker/

但是,我得到了一个错误:

“请求”对象没有“任务”属性

型号.py

class Task_worker(models.Model):
    worker = models.ForeignKey(Worker)
    task = models.ForeignKey(Task)

    class Meta:
        unique_together = ('worker', 'task')

class Task(models.Model):
    ...

class Worker(models.Model):
    ...
class TaskWorkerSerializer(serializers.ModelSerializer):
    task = serializers.ReadOnlyField(source='task.id')
    worker = serializers.ReadOnlyField(source='worker.id')

    class Meta:
        model = Task_worker
        fields = ('id', 'task', 'worker', 'created', )

    def create(self, validated_data):
        validated_data['task_id'] = self.context['request'].task
        return super(TaskWorkerSerializer, self).create(validated_data)
class TaskWorker(generics.ListCreateAPIView):
    serializer_class = TaskWorkerSerializer

    def get_queryset(self):
        task_id = self.kwargs.get('task_id', '')
        queryset = Task_worker.objects.filter(task__user=self.request.user, task_id=task_id).distinct()
        return queryset

    def perform_create(self, serializer):
        worker = Worker.objects.get(user=self.request.user)
        task = Task.objects.get(pk=self.kwargs.get('task_id', ''))
        serializer.save(task=task, worker=worker)
        #ALSO TRIED
        #serializer.save(task_id=self.kwargs.get('task_id', ''), worker=worker)
url(r'^task-worker/(?P<task_id>[0-9]+)/$', views.TaskWorker.as_view()),
序列化程序.py

class Task_worker(models.Model):
    worker = models.ForeignKey(Worker)
    task = models.ForeignKey(Task)

    class Meta:
        unique_together = ('worker', 'task')

class Task(models.Model):
    ...

class Worker(models.Model):
    ...
class TaskWorkerSerializer(serializers.ModelSerializer):
    task = serializers.ReadOnlyField(source='task.id')
    worker = serializers.ReadOnlyField(source='worker.id')

    class Meta:
        model = Task_worker
        fields = ('id', 'task', 'worker', 'created', )

    def create(self, validated_data):
        validated_data['task_id'] = self.context['request'].task
        return super(TaskWorkerSerializer, self).create(validated_data)
class TaskWorker(generics.ListCreateAPIView):
    serializer_class = TaskWorkerSerializer

    def get_queryset(self):
        task_id = self.kwargs.get('task_id', '')
        queryset = Task_worker.objects.filter(task__user=self.request.user, task_id=task_id).distinct()
        return queryset

    def perform_create(self, serializer):
        worker = Worker.objects.get(user=self.request.user)
        task = Task.objects.get(pk=self.kwargs.get('task_id', ''))
        serializer.save(task=task, worker=worker)
        #ALSO TRIED
        #serializer.save(task_id=self.kwargs.get('task_id', ''), worker=worker)
url(r'^task-worker/(?P<task_id>[0-9]+)/$', views.TaskWorker.as_view()),
视图.py

class Task_worker(models.Model):
    worker = models.ForeignKey(Worker)
    task = models.ForeignKey(Task)

    class Meta:
        unique_together = ('worker', 'task')

class Task(models.Model):
    ...

class Worker(models.Model):
    ...
class TaskWorkerSerializer(serializers.ModelSerializer):
    task = serializers.ReadOnlyField(source='task.id')
    worker = serializers.ReadOnlyField(source='worker.id')

    class Meta:
        model = Task_worker
        fields = ('id', 'task', 'worker', 'created', )

    def create(self, validated_data):
        validated_data['task_id'] = self.context['request'].task
        return super(TaskWorkerSerializer, self).create(validated_data)
class TaskWorker(generics.ListCreateAPIView):
    serializer_class = TaskWorkerSerializer

    def get_queryset(self):
        task_id = self.kwargs.get('task_id', '')
        queryset = Task_worker.objects.filter(task__user=self.request.user, task_id=task_id).distinct()
        return queryset

    def perform_create(self, serializer):
        worker = Worker.objects.get(user=self.request.user)
        task = Task.objects.get(pk=self.kwargs.get('task_id', ''))
        serializer.save(task=task, worker=worker)
        #ALSO TRIED
        #serializer.save(task_id=self.kwargs.get('task_id', ''), worker=worker)
url(r'^task-worker/(?P<task_id>[0-9]+)/$', views.TaskWorker.as_view()),
即使在
perform\u create()
中没有明确的
task
,我仍然会得到相同的错误,即请求没有任务属性

url.py

class Task_worker(models.Model):
    worker = models.ForeignKey(Worker)
    task = models.ForeignKey(Task)

    class Meta:
        unique_together = ('worker', 'task')

class Task(models.Model):
    ...

class Worker(models.Model):
    ...
class TaskWorkerSerializer(serializers.ModelSerializer):
    task = serializers.ReadOnlyField(source='task.id')
    worker = serializers.ReadOnlyField(source='worker.id')

    class Meta:
        model = Task_worker
        fields = ('id', 'task', 'worker', 'created', )

    def create(self, validated_data):
        validated_data['task_id'] = self.context['request'].task
        return super(TaskWorkerSerializer, self).create(validated_data)
class TaskWorker(generics.ListCreateAPIView):
    serializer_class = TaskWorkerSerializer

    def get_queryset(self):
        task_id = self.kwargs.get('task_id', '')
        queryset = Task_worker.objects.filter(task__user=self.request.user, task_id=task_id).distinct()
        return queryset

    def perform_create(self, serializer):
        worker = Worker.objects.get(user=self.request.user)
        task = Task.objects.get(pk=self.kwargs.get('task_id', ''))
        serializer.save(task=task, worker=worker)
        #ALSO TRIED
        #serializer.save(task_id=self.kwargs.get('task_id', ''), worker=worker)
url(r'^task-worker/(?P<task_id>[0-9]+)/$', views.TaskWorker.as_view()),

在序列化程序的创建方法中,不需要这一行
validated_data['task\u id']=self.context['request'].task
。任务将自动添加

此外,如果您有此功能,则不需要
validated_data['worker']=self.context['request'].worker

从文档中:

调用.create()或.update()时,任何其他关键字参数都将包含在已验证的_数据参数中


您想向Task_worker模型添加条目吗?@VikasDamodar是的,但是因为它是一个多对多(Task_worker)的槽表,所以我需要指定Task_idIt,如果发生错误,它不清楚。请发布完整的回溯。@DanielRoseman AddedI认为serializers.py中存在问题,您是否也可以添加该问题?