首页 > 解决方案 > 使用从 URL 获取的数据填写 Django 表单

问题描述

我想通过我通过 url 获得的表单创建一个新的谬误(参见 models.py)path('<slug:slug_tree>/new/', views.CreateFallacyView.as_view(), name='create_fallacy'),。所以用户在TreeDetailView(对应于某棵树)上,他可以在这棵树上添加一个新的谬误。用户应输入标题和详细信息,但应在代码中分配树(外键)。它应该被分配给相应的树,他从该树被定向到 CreateFallacyView。树的块在 URL 内,所以我想我可以以某种方式使用该信息,但我不知道如何继续使用该信息。任何帮助表示赞赏!或者可能还有其他更优雅的解决方案?

非常感谢!

模型.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)
      

视图.py

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

表格.py

class FallacyForm(forms.ModelForm):

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

网址.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'),

标签: pythondjango

解决方案


CreateFallacyView您可以将其链接到方法 [Django-doc]Tree中的给定方法:.form_valid(…)

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)

推荐阅读