Моя цель - создать конечную точку, которая будет контролировать создание объектов модели с помощью GenericForeignKey. Так как модель также включает ContentType, фактический тип модели, о которой мы будем ссылаться, неизвестен до создания объекта.«Динамические» поля в сериализаторах DRF
Я приведу пример:
У меня есть «как» модель, которая может ссылаться на ряд других моделей, таких как «книги», «Автор».
class Like(models.Model):
created = models.DateTimeField()
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey('content_type', 'object_id')
Serializer может выглядеть следующим образом:
class LikeSerializer(serializers.ModelSerializer):
class Meta:
model = models.Like
fields = ('id', 'created',)
То, что я хочу добиться того, чтобы определить тип Подобраны на основе ключей, передаваемых в запросе. Проблема в том, что DRF не передает эти ключи из запроса, если они не были указаны в полех Serializer
. Например, тело запроса POST содержит:
{
"book":2
}
Я хочу сделать следующий
def restore_object(self, attrs, instance=None)
if attrs.get('book', None) is not None:
# create Like instance with Book contenttype
elif attrs.get('author', None) is not None:
# create Like instance with Author contenttype
В этом случае первое, если условие будет выполнено. Как видите, тип определяется на основе ключа, переданного в запросе, без указания специального поля.
Есть ли способ достичь этого?
Благодаря