如何将模型从 Django Rest Framework 中的 ViewSet 传递到通用序列化程序

How to pass a Model to a Generic Serializer from a ViewSet in Django Rest Framework

我正在尝试创建一个通用 TemporalModelSerializer。

TemporalModelSerializer 创建新记录并终止旧记录。

这样做是成功的,但是现在我想将 Serializer 用于其他模型。

是否可以将模型传递到Serializer中,然后在这一行中使用它?

谢谢

OptionMaster.objects.filter(pk=instance.pk, vflag=1).update(**new_record)

观看次数

class OptionMasterViewSet(viewsets.ModelViewSet):
    serializer_class = TemporalModelSerializer
    queryset = OptionMaster.objects.filter(vflag=1)
    lookup_field = 'contractcode'

通用 TemporalModelSerializer

class TemporalModelSerializer(serializers.ModelSerializer):
    vf = serializers.HiddenField(default=datetime.now())
    vt = serializers.HiddenField(default=datetime(3000, 12, 31, 23, 00, 00, 000000))
    vflag = serializers.HiddenField(default=1)
    vu = serializers.HiddenField(default='Theodore')

    class Meta:
        model = OptionMaster
        exclude = ('vt', 'vf', 'vu', 'vflag')

    def update(self, instance, validated_data):

        time_now = datetime.now()
        old_record = {}
        new_record = {}

        for field in instance._meta.get_fields():
            old_record[field.name] = getattr(instance, field.name)
            new_record[field.name] = validated_data[field.name]

        old_record['vt'] = time_now
        old_record['vflag'] = 0

        new_record['vf'] = time_now
        self.delete_me(old_record)

        OptionMaster.objects.filter(
            pk=instance.pk, vflag=1).update(**new_record)

        return instance

    def delete_me(self, old_record):
        obj = OptionMaster.objects.create(**old_record)

此处的答案将帮助您设置 serializer.py 和 views.py

然后在你的序列化器中使用

self.Meta.model.objects.filter(pk=instance.pk, vflag=1).update(**new_record)