Задать этот вопрос довольно сложно, поэтому я попытаюсь проиллюстрировать его на нескольких рисунках.
Я создал следующий интерфейс, чтобы пользователь мог нажать кнопку add
и создать новых дочерних элементов javascript (его родитель).

нажатие add
показывает следующий интерфейс:

Все работает хорошо, за исключением того, что я должен вручную выбрать JavaScript
в качестве родителя нового ребенок. Я хочу автоматизировать этот процесс, чтобы пользователю не нужно было выбирать JavaScript
в качестве его родителя, и он автоматически берется из url
.
Это моя идея, но я не знаю, как это сделать. У нас уже есть родительское имя в предыдущем url
:
до нажатия кнопки add
, если есть способ, которым я могу отправить часть этого URL, а именно JavaScript
в нашей форме, чтобы форма могла использовать его как-то так:
class CatLevelThreeCreateView(CreateView):
model = CatLevelThree
template_name = 'cat-level-three-create.html'
success_url = '/'
fields = ['title', 'summary', 'image']
def form_valid(self, form):
form.instance.levelThreeParent = self.kwargs.get('-------') # something instead of dashes!
return super().form_valid(form)
, только если я могу получить родителя (в нашем примере JavaSript
) откуда-то проблема решена! и выше код будет делать свою работу!
Это моя плохая идея, но если вы знаете лучший способ! Если вы знаете лучшее решение, то было бы очень полезно
здесь urls.py
, это немного некрасиво, простите:
urlpatterns = [
path('Level5/new/', CatLevelFiveCreateView.as_view(), name='levelFiveCreate'),
path('Level4/new/', CatLevelFourCreateView.as_view(), name='levelFourCreate'),
path('Level3/new/', CatLevelThreeCreateView.as_view(), name='levelThreeCreate'),
path('Level2/new/', CatLevelTwoCreateView.as_view(), name='levelTwoCreate'),
path('Level1/new/', CatLevelOneCreateView.as_view(), name='levelOneCreate'),
path('<slug:Catlevel1Slug>/<slug:Catlevel2Slug>/<slug:Catlevel3Slug>/<slug:Catlevel4Slug>/',
CatLevelFiveListView.as_view(), name='levelFiveList'),
path('<slug:Catlevel1Slug>/<slug:Catlevel2Slug>/<slug:Catlevel3Slug>/',
CatLevelFourListView.as_view(), name='levelFourList'),
path('<slug:Catlevel1Slug>/<slug:Catlevel2Slug>/',
CatLevelThreeListView.as_view(), name='levelThreeList'),
path('<slug:Catlevel1Slug>/',
CatLevelTwoListView.as_view(), name='levelTwoList'),
path('', CatLevelOneListView.as_view(), name='levelOneList'),
]
и views.py
:
class CatLevelOneListView(ListView):
model = CatLevelOne
template_name = 'cat-level-one.html'
context_object_name = 'categorieslvl1'
class CatLevelOneCreateView(CreateView):
model = CatLevelOne
fields = ['title', 'summary', 'image']
template_name = 'cat-level-one-create.html'
success_url = 'ParentChild:levelOneList'
class CatLevelTwoListView(ListView):
model = CatLevelTwo
template_name = 'cat-level-two.html'
context_object_name = 'categorieslvl2'
def get_queryset(self):
qs = super().get_queryset()
return qs.filter(levelTwoParent__slug=self.kwargs.get('Catlevel1Slug'))
# return qs.objects.filter(levelTwoParent__slug=self.kwargs.get('Catlevel2Slug'))
class CatLevelTwoCreateView(CreateView):
model = CatLevelTwo
template_name = 'cat-level-two-create.html'
success_url = 'ParentChild:levelOneList'
fields = ['title', 'summary', 'image', 'levelTwoParent']
class CatLevelThreeListView(ListView):
model = CatLevelThree
template_name = 'cat-level-three.html'
context_object_name = 'categorieslvl3'
def get_queryset(self):
qs = super().get_queryset()
return qs.filter(levelThreeParent__slug=self.kwargs.get('Catlevel2Slug'))
class CatLevelThreeCreateView(CreateView):
model = CatLevelThree
template_name = 'cat-level-three-create.html'
success_url = '/'
fields = ['title', 'summary', 'image', 'levelThreeParent']
""" def form_valid(self, form):
form.instance.levelThreeParent = self.kwargs.get('Catlevel2Slug')
return super().form_valid(form) """
class CatLevelFourListView(ListView):
model = CatLevelFour
template_name = 'cat-level-four.html'
context_object_name = 'categorieslvl4'
def get_queryset(self):
qs = super().get_queryset()
return qs.filter(levelFourParent__slug=self.kwargs.get('Catlevel3Slug'))
class CatLevelFourCreateView(CreateView):
model = CatLevelFour
template_name = 'cat-level-four-create.html'
success_url = '/'
fields = ['title', 'summary', 'image', 'levelFourParent']
class CatLevelFiveListView(ListView):
model = CatLevelFive
template_name = 'cat-level-five.html'
context_object_name = 'categorieslvl5'
def get_queryset(self):
qs = super().get_queryset()
return qs.filter(levelFiveParent__slug=self.kwargs.get('Catlevel4Slug'))
class CatLevelFiveCreateView(CreateView):
model = CatLevelFive
template_name = 'cat-level-five-create.html'
success_url = '/'
fields = ['title', 'summary', 'image', 'levelFiveParent']
Спасибо за чтение и помощь.