【发布时间】:2023-03-17 21:47:01
【问题描述】:
我创建了 API 来创建更新案例但问题在于 task 如果我在通过邮递员更新或创建时只传递一个 pk like(task=1) 那么它工作正常并且案例将通过引用该任务来创建但是一个任务是一个多态字段我需要将多个任务pk分配给task = [1,2]这样的案例然后它会给出像
"Incorrect type. Expected pk value, received str."
]
class Case(models.Model):
name = models.CharField(max_length=200)
task = models.ManyToManyField('task.Task',blank=True, null=True)
assigned_to = models.ForeignKey("account.User",null=True, blank=True, on_delete=models.SET_NULL)
class CaseSerializer(serializers.ModelSerializer):
class Meta:
model = Case
fields = ('id', 'name', 'task', 'assigned_to')
class CaseCreateView(APIView):
permission_classes = (IsAuthenticated,)
@access_permission('case_create')
def post(self, request, format=None):
serializer = CaseSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
class CaseUpdateView(APIView):
permission_classes = (IsAuthenticated,)
model = Case
@access_permission('case_edit')
def put(self, request,pk, format=None):
case = get_object(self,pk)
serializer = CaseSerializer(case,data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
【问题讨论】:
-
只为一个对象在 DRF 中创建和更新,所以如果你想批量创建/更新你需要使用技巧。看到这个:stackoverflow.com/questions/33826742/… 并且在 DRF 中有一个散装包,但我从未使用过它:pypi.org/project/djangorestframework-bulk
-
我想将多个任务分配给案例,因为案例有许多字段用于引用@mehdi
-
所以你能用
view部分更新你的问题吗? -
Treid 在序列化程序中添加
task = serializers.PrimaryKeyRelatedField(many=True,read_only=False,queryset=Task.objects.all())仍然存在问题
标签: python django django-rest-framework