【发布时间】:2019-05-18 07:15:33
【问题描述】:
我有一个模型视图集:
class ExpenseViewSet(ModelViewSet):
permission_classes = [permissions.IsAuthenticated, HasMetis]
serializer_class = ExpenseSerializer
def get_queryset(self):
return Expense.objects.filter(recorded_by=self.request.user)
还有一个序列化器:
class ExpenseSerializer(serializers.ModelSerializer):
class Meta:
model = Expense
fields = ["flat_id", "flat_group_id", "description", "notes", "amount"]
这些是 POST 到视图集的字段,但它们不足以完全填充对象,因此我需要添加更多字段。
我尝试过覆盖序列化程序,如下所示:
class ExpenseSerializer(serializers.ModelSerializer):
class Meta:
model = Expense
fields = ["flat_id", "flat_group_id", "description", "notes", "amount"]
def create(self, validated_data):
expense = Expense.objects.create(
flat_id=validated_data["operations_flat"],
flat_group_id=validated_data["operations_building"],
description=validated_data["description"],
notes=validated_data["notes"],
amount=validated_data["amount"],
recorded_by=self.request.user,
)
return expense
然而,它永远不会被调用(通过在 create 函数中添加 print 语句进行测试 - 它永远不会运行)。显然这是因为这个问题:Django Rest Framework serializer create() doesn't get triggered 这解释了问题,但不是如何解决我的问题。
我不确定是否需要重写序列化器的is_valid函数,序列化器的create函数,或者viewset的create函数,或者别的什么。
【问题讨论】:
-
可能是您覆盖了视图集上的某些内容,导致默认视图行为混乱,或者您提供的数据无效(检查服务器响应代码和内容)。
标签: django django-rest-framework django-rest-viewsets