好的,因此使用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文件中声明的UserSerializerserializers.py
然后,您将使用以下字符串引用UserSerializer:"appname.serializers.UserSerializer",通常在其中写入UserSerializer的位置

09-06 06:58