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)