pizzacode
pizzacode

Reputation: 25

django, Changing field values ​in model before saving to database

class PlayerList(models.Model):

name = models.CharField(max_length=300)
position = models.CharField(max_length=200)
h_code = models.ForeignKey(HList, related_name="h_code", on_delete=models.CASCADE)
d_code = models.CharField(primary_key=True, max_length = 200, editable=False)

Serializers.py

class PlayerSerializer(serializers.ModelSerializer):    
    class Meta:
        fields = ["name", "position", "h_code", "d_code"]
        model = PlayerList

view.py

class PostPlayer(generics.ListCreateAPIView):
    queryset = PlayerList.objects.all().order_by('-d_code')
    serializer_class = PlayerListSerializer

    def get(self, request, *args, **kwargs):
        d_code = request.data.get('h_code') + 'test'
        print(d_code)

print(d_code) :

h000001test

When entering a value through api, I want to implement that the entered value is changed to another value in view.py and saved in the db.

I want to save d_code processed by def get in db.

I don't know what to do. Can you please let me know?

There is no answer, so I will post again.

Upvotes: 2

Views: 723

Answers (1)

Hafnernuss
Hafnernuss

Reputation: 2817

You can override your views perform_create() method, as stated in the docs (you might have to scroll a little, its in the Save and deletion hooks section:

class PostPlayer(generics.ListCreateAPIView):
    queryset = PlayerList.objects.all().order_by('-d_code')
    serializer_class = PlayerListSerializer

    def get(self, request, *args, **kwargs):
        d_code = request.data.get('h_code') + 'test'
        print(d_code)
    ...
    ...
    def perform_create(self, serializer):
        d_code = request.data.get('h_code') + 'test'
        #do something with d_code
        new_code = d_code + 'someSampleValue'
        serializer.save(d_code=new_code)

Upvotes: 1

Related Questions