我的一个模特里面有一个内部类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是最好的方法吗?
答案 0 :(得分:0)
您似乎在混淆模型和视图集。 Viewsets没有Meta属性。
在任何情况下,在模型上,objects.all()
是一个字符串,用于定义数据库中表的名称;它不是你可以打电话给GET
的东西。