好的,因此使用Django REST框架教程中的直接示例,我有2个类:UserSerializer和SnippetSerializer。我希望能够在SnippetSerializer类声明中将“UserSerializer”用作序列化程序,但是由于某些原因,需要先声明SnippetSerializer。代码示例:
class SnippetSerializer(serializers.HyperlinkedModelSerializer):
owner = UserSerializer()
#unimportant stuff
class UserSerializer(serializers.HyperlinkedModelSerializer):
#unimportant stuff - lets say we reference SnippetSerializer here
我想到的最明显的答案是前向声明,但是从我的所有研究中,我无法在Python中找到它。
我认为可能可行的另一种解决方案,但没有(也许我做错了吗?),而是尝试在init方法中声明此关系。
class SnippetSerializer(serializers.HyperlinkedModelSerializer):
def __init__(self, *args, **kwargs):
self.owner = UserSerializer()
super(SnippetSerializer, self).__init__(*args, **kwargs)
但这似乎被框架完全忽略了。
我也尝试使用@addto,但似乎只适用于函数,不适用于属性/属性
有办法解决这个问题吗?这个“先有鸡”类问题已经在Python中杀死了我一段时间,但是我终于遇到了一个实例,该实例实际上阻止了我完成工作。
最佳答案
您也许可以提供一个包含类的(点符号)路径的字符串。
使用DRF,您可能具有如下所示的文件夹结构:
├── appname
│ ├── ...
│ └── serializers.py
├── ...
在上述SnippetSerializer
文件中声明的UserSerializer
和serializers.py
。然后,您将使用以下字符串引用
UserSerializer
:"appname.serializers.UserSerializer"
,通常在其中写入UserSerializer
的位置