Я хочу создавать разрешения в представлениях динамически, а не по умолчанию в моделях.
Я создаю основной класс с именем CreatorView.
from django.views.generic import View
from django.forms.models import modelform_factory
class CreatorView(View):
model = None
fields = None
exclude = None
form = None
page_title = ''
def create_form(self):
default =dict()
if self.fields == None:
if self.exclude == None:
default['fields'] = self.fields = self.model._meta.fileds
else:
default['exclude'] = self.exclude
else:
if self.exclude:
raise Exception('error')
default['fields'] = self.fields
return modelform_factory(self.model,**default)
def get(self,request,*args,**kwargs):
return render('','base.html')
def post(self,request,*args,**kwargs):
... and so on
основные URL-адреса:
urlpatterns = [
path('%s/%s' % (cls.model._meta.app_label, cls.__name__.lower()), cls.as_view(),
name='%s/%s' % (cls.model._meta.app_label, cls.__name__.lower())) for cls
in CreatorView.__subclasses__()]
если я делаю наследование от CreatorView, тогда мой класс должен создать страницу, например:
class Login(CreatorView):
model = Users
""" my overwrite methods and actions """
class Configurations(CreatorView):
model = Configure
""" my overwrite methods and actions """
class Teachers(CreatorView):
model = Teachers
""" my overwrite methods and actions """
class Students(CreatorView):
model = Students
""" my overwrite methods and actions """
and so on
этот код создаст для меня четыре страницы, которые я хочу создать для модели table semi to django content_type:
id | app_label | page |
---|---|---|
1 | myapp | login |
2 | myapp | configurations |
3 | myapp | teachers |
4 | myapp | students |
Могу ли я изменить таблицу auth_permission в Django, чтобы сделать внешний ключ content_type из моего content_type? Если я могу, как предотвратить вставку разрешений по умолчанию и сделать мою вставку для разрешения по умолчанию?