I make Api for my database by django REST framework , i get model nickname from url.py
as a variable var
then use it in views.py
to determine
which models will use with any function i want.
So i make dictionary collection of models value
, use var
as a key and put result model in data
variable to use model as i need .
The problem :
when i make initial value to data
it not change in function call, or i don't what's happen but when i use invalid nickname it return error also i can't make data
as None
value , i try a lot of things like getattr
but all is failed , i think it can solved by OOP python but my knowledge about it doesn't help me .
Not : i use django 2.0, database mysql, python 3.6
Edit : if i want similar method but on pk
to use it in data_detail, i try this line data.objects.get(pk=pk)
but it doesn't work
url.py
from .views import data_detail, data_name
urlpatterns = [
url(r'^(?P<var>[\w-]+)/$', data_list, name='list'),
url(r'^(?P<var>[\w-]+)/(?P<pk>\d+)/$', data_detail, name='id')
]
views.py
from .models import Authors, Users, Categories
value = {'user': Users,
'author': Authors,
'cate': Categories,
}
data = value['user']
def data_list(request, var):
global data
data = value[var]
return DataList.as_view()(request)
class DataList(ListAPIView):
queryset = data.objects.all()
AllDataSerializer.Meta.model = data
serializer_class = AllDataSerializer
def data_detail(request, var, pk):
global data
data = value[var]
data = data.objects.get(pk=pk)
return DataDetail.as_view()(request)
class DataDetail(ListAPIView):
queryset = data.objects.all()
AllDataSerializer.Meta.model = data
serializer_class = AllDataSerializer
from .models import Authors, Users, Categories
value = {'user': Users,
'author': Authors,
'cate': Categories,
}
def data_list(request, var):
data = value[var]
return DataList.as_view(**{'model_name':data})(request)
class DataList(ListAPIView):
model_name = None
def get_queryset(self):
return self.model_name.objects.all()
def get_serializer_class(self):
AllDataSerializer.Meta.model = self.model_name
return AllDataSerializer