内部类元字段作为要使用的变量

时间:2016-01-25 18:31:06

标签: python django django-models django-views django-class-based-views

我的一个模特里面有一个内部类Meta。我希望稍后在我的一个函数中使用这个属性。如何在不明确指定db_table名称的情况下使用此功能?我希望这能够简单地扩展调用相同函数的子类,而不必每次都重写该方法。

使用self._meta.db_table.objects.all()会抛出一条错误消息,指出self没有_meta属性。找到下面的代码示例:

class ViewSetDef(ModelViewSet):
    """Provide the /defined_search/ endpoints."""

    permission_classes = (IsAuthenticated, )
    serializer_class = SearchSerializer

    class Meta:                     # pylint: disable=W0232,C1001
        db_table = DefSearch

    def get_queryset(self):
        return DefSearch.objects.all()
        # return self._meta.db_table.objects.all()

从上面延伸的子类

class InfoViewSetDef(ViewSetDef):
    """Provide the /defined_search/ endpoints."""

    permission_classes = (IsAuthenticated, )
    serializer_class = InfoViewSet

    class Meta:                     # pylint: disable=W0232,C1001
        db_table = InfoViewDefSearch

    # I'm over-riding get_queryset because I dont know how to 
    def get_queryset(self):
        return InfoViewDefSearch.objects.all()
        # return self._meta.db_table.objects.all() 

在阅读Daniel的澄清评论之后编辑:

我希望能够将一个类指定为Viewset中的任何实体X,然后将该函数定义为:f(x)= X.objects.all()。我以为我可以在Meta类中使用它并调用它,但显然不是。你能建议其他一些选择吗?是models.ForeignKey是最好的方法吗?

1 个答案:

答案 0 :(得分:0)

您似乎在混淆模型和视图集。 Viewsets没有Meta属性。

在任何情况下,在模型上,objects.all()是一个字符串,用于定义数据库中表的名称;它不是你可以打电话给GET的东西。