0

I'm trying to create a Generic TemporalModelSerializer.

The TemporalModelSerializer creates a new record and terminates the old record.

It is successful in doing so, however now i would like to use the Serializer for other models.

Is it possible to pass the model into the Serializer and then use it in this line?

Thanks

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

Views

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

The Generic 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)
Glenn Sampson
  • 1,188
  • 3
  • 12
  • 30

1 Answers1

1

The answer here will help on how to set up you serializer.py and views.py https://stackoverflow.com/a/30833834/4200352

And then to use in your serializer

self.Meta.model.objects.filter(pk=instance.pk, vflag=1).update(**new_record)
Rach Odwyer
  • 184
  • 1
  • 14