Есть модель с внешним ключем:
class Ticket(models.Model):
name = models.CharField(max_length=255)
text = models.TextField(blank=True)
author = models.ForeignKey(settings.AUTH_USER_MODEL)
И соответственно сериалайзеры:
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = get_user_model()
class TicketSerializer(serializers.ModelSerializer):
class Meta:
model = Ticket
В списке результатов по запросу тикетов хотелось бы получать результат сразу с подставленным автором, вот таким образом
[
{
"id": 1,
"author": {
"first_name": "",
"id": 1,
"last_name": "",
"middle_name": "",
"is_active": true,
"username": "admin",
"role": 1,
"full_name": "admin",
"email": "admin@example.com",
"active_unitl": null
},
"assignee": null,
"name": "",
"text": "",
"deadline": null,
"priority": 2,
"status": 3,
"progress": 0,
"created": "2015-06-25T07:50:48Z",
"modified": "2015-06-25T07:50:48Z",
}
]
Этого можно добиться если указать поле author = UserSerializer():
class TicketSerializer(serializers.ModelSerializer):
class Meta:
model = Ticket
author = UserSerializer()
Однако при этом возникакет проблема с create/update.
Без этого поля все работает как надо, отправляешь id автора и все работает:
{
"author": author.id,
"name": "делай что-нибудь",
"text": "по ТЗ",
"deadline": "2015-06-25",
"priority": 2,
}
А с author = UserSerializer(), так уже не работает, надо переопределять методы create/update.
И тут не ясно что делать, толи методы create/update переопределять, толи использовать два сериалайзера, для чтения и записи. Ни то не другое не кажутся хорошими решениям, кажется это должно все из коробки работать.