好的,因此,使用Django REST框架教程中的直接示例,我有两个类:UserSerializer和SnippetSerializer。我希望能够在SnippetSerializer类声明中使用“UserSerializer”作为序列化程序,但出于某种原因,需要首先声明SnippetSerializer。代码示例:在声明之前在python中引用一个类
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中遇到了一段时间,但是我终于遇到了一个实际上阻止我完成工作的例子。
你是否在程序启动后声明类?通常你会在运行程序之前声明类/函数。 – user5823815
我知道关于Django的zilch,但经典的方法是在* SnippetSerializer之前声明的UserSerializerBase,然后从中继承UserSerializer。这就是Python,你当然可以在事后改变实际的类定义,从而在SnippetSerializer之前声明UserSerializer,然后再修改它。 – deets
@user - yes,但是由于django是一种没有头文件的解释型语言,并且它不会像JavaScript那样执行语言这样的前瞻性阅读,所以在代码到达声明之前不能引用另一个类。 – Dakusan