Заполните форму Django данными, полученными из URL-адреса

Я хочу создать новый Fallacy (см. models.py) через форму, на которую я попадаю по url path('<slug:slug_tree>/new/', views.CreateFallacyView.as_view(), name='create_fallacy'),. То есть пользователь находится на странице TreeDetailView (которая соответствует определенному Дереву), и он может добавить новую Фаллацию к этому дереву. Пользователь должен ввести название и деталь, но Дерево (ForeignKey) должно быть назначено в коде. Он должен быть присвоен соответствующему Дереву, из которого он был направлен в CreateFallacyView. Slug дерева находится внутри URL, поэтому я подумал, что могу как-то использовать эту информацию, но я понятия не имею, как я могу действовать с этой информацией. Любая помощь будет принята с благодарностью! Или, возможно, есть другие более элегантные решения?

Большое спасибо!

models.py

class Tree(models.Model):
    title = models.CharField(max_length=50)
    detail = models.TextField()
    slug = models.SlugField(allow_unicode=True, unique=True, null=True, blank=True)
    
class Fallacy(models.Model):
    title = models.CharField(max_length=50)
    detail = models.TextField()
    tree = models.ForeignKey(Tree, related_name='fallacy', on_delete=models.CASCADE)
      

views.py

class CreateFallacyView(generic.CreateView):
    form_class = forms.FallacyForm

forms.py

class FallacyForm(forms.ModelForm):

    class Meta:
        model = models.Fallacy
        fields = ('title', 'detail')

urls.py

app_name = 'argtree'

urlpatterns = [
    path('', views.TreeListView.as_view(), name='all'),
    path('<slug:slug_tree>/', views.TreeDetailView.as_view(), name='tree_detail'),
    path('<slug:slug_tree>/new/', views.CreateFallacyView.as_view(), name='create_fallacy'),

В CreateFallacyView вы можете связать его с данным Tree в .form_valid(…) методом [Django-doc] с:

from django.shortcuts import get_object_or_404

class CreateFallacyView(generic.CreateView):
    form_class = forms.FallacyForm
    
    def form_valid(self, form):
        tree = get_object_or_404(Tree, slug=self.kwargs['slug_tree'])
        form.instance.tree = tree
        return super().form_valid(form)
Вернуться на верх