我需要序列化的自參考層次差不多失去了:self.parent.parent .__ class__
class Systm(models.Model):
...
parent = models.ForeignKey('self', on_delete=models.CASCADE, blank = True, null = True, related_name="children")
,我是能夠實現與下面的代碼:
class RecursiveField(serializers.Serializer):
def to_representation(self, value):
serializer = self.parent.parent.__class__(value, context=self.context)
return serializer.data
class SystmSerializer(serializers.ModelSerializer):
children = RecursiveField(many = True, read_only = True)
class Meta:
model = models.Systm
fields = ('id', 'name', 'type', 'children')
它的工作原理除了我所做的只是複製和粘貼代碼,但並不知道它是如何工作的以及爲什麼它能夠工作。這很煩人,我想了解它。
我把'print
'命令寫入'to_representation(...)
',但仍不清楚。我瞭解到,'self.parent.parent.__class__(value, context=self.context)
'執行時有遞歸,但不知道爲什麼。
如果有人能解釋給我,我會很感激。
感謝,
五
這基本上是正確的,雖然非常簡單,我不確定我會幫助OP真正理解所有其他框架魔法下面發生了什麼。 –
嗨邁克爾,感謝您的回覆!不過,我擔心邁克爾是對的,我還沒有看到整個畫面。我沒有得到它如何遞歸圖片,爲什麼有遞歸呢?是否因爲django爲queryset的每個記錄調用了to_represantation(...)? – Viktor
添加了簡單的描述如何發生遞歸,希望這有助於。 to_representation確實是在對象實例和所有孩子上調用的,等等...... –