Reputation: 365
I have these django models:
class Event(models.Model):
ts = models.CharField(max_length=25, editable=False)
update_id = models.IntegerField( null=False)
msg_id = models.CharField(max_length=50, primary_key=True, blank=True)
chat = models.ForeignKey(Chat, on_delete=models.CASCADE, blank=True)
user_id = models.ForeignKey(ChatUser, on_delete=models.CASCADE, blank=True)
text = models.TextField(blank=True)
is_visible = models.BooleanField(default=True, blank=True)
edited_version = models.TextField(null=True, blank=True)
and serializer:
class UpdatesSerializer(serializers.ModelSerializer):
class Meta:
model = Event
fields = ('ts', 'update_id', 'msg_id', 'chat', 'user_id', 'text')
in views:
def get(self, request):
updates = Event.objects.all()
updates = [UpdatesSerializer().to_representation(update) for update in updates]
return Response(updates)
it represents data like this:
{
"ts": 1,
"update_id": 4,
"msg_id": 1,
"chat": 1,
"user_id": 1,
"text": "test"
}
How can I represent data like this? :
{
"ts": 1,
"update_id": 4,
"details":{
"msg_id": 1,
"chat": 1,
"user_id": 1,
"text": "test"
}
}
Actually I could separate this model and use fields from details as manytomany but it doesnt let me create event using this:
message_ = Event.objects.create(ts=int(time.time()), update_id=4)
message_.save()
message_.message.add(text="1")
Upvotes: 1
Views: 164
Reputation: 88499
Re-define your serializers as below:
class DetailsSerializer(serializers.ModelSerializer):
class Meta:
model = Event
fields = ('msg_id', 'chat', 'user_id', 'text')
class EventSerializer(serializers.ModelSerializer):
details = DetailsSerializer(source='*')
class Meta:
model = Event
fields = ('ts', 'update_id', 'details')
and change view
to
def get(self, request):
event_queryset = Event.objects.all()
event_serializer = EventSerializer(event_queryset, many=True)
return Response(data = event_serializer.data)
You could add text
like
message_ = Event.objects.create(ts=int(time.time()), update_id=4)
<strike>message_.save()</strike> # this save is not required because the ".create()" method calls the save() method silently
message_.text = "some text i want to update"
message_.save() # this time save is mandatory because we changed the value and we have to save it to DB
References:
Upvotes: 1