Estou com certa dificuldade em criar esse serializador. Gostaria que os nested serializers fossem opcionais e aparecessem tanto pra criar, quanto pra visualizar (documentação). O grande problema é que em todos esses nested eu tenho ForeignKey() e não vejo nenhuma forma de fazer tudo isso automatizado pelo django, já que é preciso antes criar os itens que serão chaves estrangeiras. Gostaria de ter a possibilidade de criar essas foreign keys no próprio serializador mas em um método que não seja o create. Dessa forma cada serializador seria responsável por criar suas próprias Foreign Key e eu não precisaria sobrescrever o método create. Por exemplo, gostaria de criar um getter no serializador que seria o valor padrão de um dos campos a serem serializados (seja pra leitura ou pra escrita), assim eu não preciso ficar criando usuário dentro de um loop.
Sei que o SerializerMethodField() pode receber e mostrar um valor, mas somente pata leitura. Gostaria de algum campo customizavel no estilo do SerializerMethodField() mas que permitisse tanto a criação, quanto a leitura do objeto.
Além disso, gostaria que esse campo fosse AthleteGuardianSerializer(many=True)
Alguma dica?
class AthleteSerializer(ModelSerializer):
guardian = AthleteGuardianSerializer(many=True,read_only=True)
def create(self, validated_data):
services = AthleteInvitationService
guardian_data = validated_data.pop('guardian', None)
athlete_user = get_object_or_404(User, pk = validated_data.pop('user'))
workspace = get_object_or_404(Workspace, pk = validated_data.pop('workspace'))
athlete = Athlete.objects.create(user = athlete_user, workspace = workspace, **validated_data)
athlete.save()
if guardian_data:
for parent in guardian_data:
parent_user_factory = get_user_factory(parent)
parent_user = services.get_or_create_basic_user(parent_user_factory)
parent_instance = AthleteGuardianSerializer.objects.create(
user = parent_user, athlete = athlete, **parent
)
parent_instance.save()