2016-02-14 25 views
3

好的,因此,使用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中遇到了一段时间,但是我终于遇到了一个实际上阻止我完成工作的例子。

+0

你是否在程序启动后声明类?通常你会在运行程序之前声明类/函数。 – user5823815

+2

我知道关于Django的zilch,但经典的方法是在* SnippetSerializer之前声明的UserSerializerBase,然后从中继承UserSerializer。这就是Python,你当然可以在事后改变实际的类定义,从而在SnippetSerializer之前声明UserSerializer,然后再修改它。 – deets

+0

@user - yes,但是由于django是一种没有头文件的解释型语言,并且它不会像JavaScript那样执行语言这样的前瞻性阅读,所以在代码到达声明之前不能引用另一个类。 – Dakusan

回答

0

这个问题听起来非常类似于StackOverflow上发布的其他Django前向声明问题。您可以使用类似this style of forward declaration?的东西您需要将owner成员封装在Django函数调用中,并且我不知道在这种情况下是否存在适当的调用。这个解决方案也是针对Django的,而不是Python的本地特性。

相关问题