Reputation: 171
If receiver==me then the name will be sender name, else name will be receiver name.
I can do it in views.py, but is it possible in serializers.py?
here is my code:
models.py:
class Message(models.Model):
sender = models.ForeignKey(User, on_delete=models.CASCADE, related_name='sender')
receiver = models.ForeignKey(User, on_delete=models.CASCADE, related_name='receiver')
body = models.TextField(max_length=1000)
date = models.DateTimeField(auto_now_add=True)
seen = models.BooleanField(default=False)
class Meta:
ordering = ('date',)
serializers.py:
class SimpleUserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id','first_name', 'last_name')
class GetMessageSerializer(serializers.ModelSerializer):
sender = SimpleUserSerializer()
receiver = SimpleUserSerializer()
#name = ....????
class Meta:
model = Message
fields = ('sender','receiver','body','date','seen')
Upvotes: 1
Views: 1329
Reputation: 3740
You can do something like this with a SerializerMethodField
class GetMessageSerializer(serializers.ModelSerializer):
sender = SimpleUserSerializer()
receiver = SimpleUserSerializer()
name = serializers.SerializerMethodField() #this field will call the method "get_name" in this serializer for value.
def get_name(self, obj):
user = self.context['request'].user
if user==obj.receiver:
return obj.sender.first_name
return obj.receiver.first_name
class Meta:
model = Message
fields = ('sender','receiver','body','date','seen', 'name') #added name here
Upvotes: 1