DRF - Как включить иностранные данные в сериализатор?

У меня есть модель, которая выглядит примерно так:

class Foo(models.Model):
    data = models.ForeignKey(Data, on_delete=models.CASCADE)
    source = models.ForeignKey(Source, on_delete=models.CASCADE)
    # other fields...

В этом случае я хотел бы показать полные модели для data и source, а не только их идентификаторы. Мне также нужно, чтобы data был доступен только для чтения, поскольку он генерируется автоматически. Мой сериализатор выглядит следующим образом:

class FooSerializer(serializers.ModelSerializer):
    data = DataSerializer(read_only=True)
    source = SourceSerializer()

    class Meta:
        model = Foo
        fields = ["data", "source"]
        read_only_fields = ["data"]

Что я не совсем понимаю, так это:

  1. Why isn't data read-only, like it would be if it were a "normal" serializer field?
  2. How can I say "save a new source if an identical one doesn't exist already?"
Вернуться на верх