poultrynews
poultrynews

Reputation: 639

Retrieve automatically-set values from DRF serializer

I have a model where certain fields are automatically set (timestamp, pk).

# models.py
class thisModel(models.Model):
        timestamp = models.DateTimeField(auto_now_add=True)
        topic = models.CharField(max_length=50)
        message = models.CharField(max_length=100, default='')

Below is my serializer:

# serializer.py
class thisSerializer(serializers.ModelSerializer):
    class Meta:
        model = thisModel
        fields = ('pk', 'topic', 'timestamp', 'message',)

When creating my model, I need only specify the topic and message.

data={}
data['topic'] = 'paper'
data['message'] = 'This is a message'
serializer = thisSerializer(data=data)
if serializer.is_valid(): # True
    serializer.save()
    # I would like to retrieve the PK and Timestamp here

The model is created, but I have no way of retrieving that model as I have no unique identifier for it.

Doing serializer.data['topic'] and serializer.data['message'] returns these fields as intended.

Doing serializer.data['pk'] returns an error: KeyError: 'pk'

Any idea on how to retrieve these fields?

Upvotes: 0

Views: 167

Answers (1)

RishiG
RishiG

Reputation: 2830

The data attribute on serializer is just the data which you specified, but serializer.save() returns the newly created object. Try this:

if serializer.is_valid():
    obj = serializer.save()
    new_pk = obj.pk
    new_timestamp = obj.timestamp

Upvotes: 1

Related Questions