我有很多鏈接模型到它:如何通過串行器創建模型實例,而無需從嵌套的串行器創建模型?
class Travel(BaseAbstractModel):
tags = models.ManyToManyField(
Tag,
related_name='travels',
)
owner = models.ForeignKey(
'users.TravelUser',
related_name='travel_owner'
)
payment = models.ForeignKey(
Payment,
related_name='travels',
)
country = models.ForeignKey(
Country,
related_name='travels,
)
........
許多車型都只有兩個唯一的名稱和圖像領域。 我對每一個模型的創建串並把它們在TravelSerializer
class TravelBaseSerializer(DynamicFieldsModelSerializer):
owner = UserSerializer(required=False)
tags = TagSerializer(many=True)
payment = PaymentSerializer()
country = CountrySerializer()
基於文檔我重寫create()
和update
。
問題是,當我發送JSON數據時,Django從嵌套序列化器創建每個模型。但我只想創建Travel
實例。另外我想接收並響應序列化對象不僅pk
字段。
UPDATE
我解決了這個問題,把代碼放在答案裏。現在,我可以接收和響應串行器數據而無需創建對象。 但我認爲DRF提供了更優雅的方法,然後我就做到了。這是我與DRF的第一個項目,也許我錯過了一些東西,並有一個更簡單的解決方案。
謝謝,但我在第一件事情中嘗試過。 ''read_only_fields'問題,這些字段不會傳遞給'validated_data' –
好,所以我想你想要的是:你想要當你的序列化器用於閱讀puproses時,它序列化所有相關的字段,並且當用於寫它嘗試驗證相關字段但不保存它們的puproses。如果我錯了,請糾正我。 – AntoineWDG
是的,但我需要'validated_data'中的這些數據,因爲我需要填充創建的'Travel'模型中的所有鏈接字段。我解決它,就像你在我的答案中看到的一樣。但是我開始這個賞金,因爲我希望找到一些最佳實踐,以達到這樣的目的。現在我想,DRF只是不允許使用嵌套序列化器來達到這樣的目的,默認情況下 –