我有一个模型视图集:
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 序列化程序 create() 没有被触发这解释了这个问题,但不是如何解决我的问题。
我不确定是否需要重写序列化程序的 is_valid 函数、序列化程序的 create 函数或视图集的 create 函数,或者其他什么。