【问题标题】:Q: Django crispy forms - change behavior depending url问:Django 脆表单 - 根据 url 改变行为
【发布时间】:2018-02-24 18:21:32
【问题描述】:

我不知道如何用 django 脆皮表单实现这一点。

我有一个带有这样 URL 的界面:

myurl.com/movements/new

我在表格中选择了运动类型。

当没有明确指定的移动类型时,只显示选择而不选择任何选项。

当用户使用myurl.com/movements/income/ 之类的 URL 访问表单时 我希望这个选择默认有income 选项。

等等所有可能的选项。

我知道我可以为此使用 JavaScript,但我认为将它放在后端会更好。

如何在后端部分实现这一点?

【问题讨论】:

    标签: html django python-3.x django-crispy-forms


    【解决方案1】:

    models.py:

    class MyModel(models.Model):
        CHOICES = (
            ('Income', 'Income'),
            ('Option2', 'Option2'),
            ('Option3', 'Option3'),
        )
        choice = models.CharField(max_length=25, choices=CHOICES)
    

    urls.py:

    urlpatterns = [
        url(
            regex=r'^new/(?P<option>[\w.@+-]+)/$',  # feel free to adjust the regex
            view=views.NewCreateView.as_view(),
            name='new'
        ),
        url(
            regex=r'^new/$',
            view=views.NewCreateView.as_view(),
            name='new'
        )
    ]
    

    views.py:

    class NewCreateView(CreateView):
        model = MyModel
        fields = ['choice']
    
        def get_form_kwargs(self):
            form_kwargs = super().get_form_kwargs()
            if 'option' in self.kwargs:
                if any(self.kwargs['option'] in choice for choice in MyModel.CHOICES):
                    form_kwargs['initial']['choice'] = self.kwargs['option']
            return form_kwargs
    

    仅当您使用有效选项(如 new/Income)访问 URL new/ 时,才会给出下拉列表的初始选择。当然,您可以根据需要调整网址。

    您也可以覆盖 get_initial 而不是 get_form_kwargs

    【讨论】:

    • 谢谢! view 部分正是我所需要的
    猜你喜欢
    • 2020-08-21
    • 2012-09-08
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 2014-12-17
    • 1970-01-01
    • 2015-10-08
    相关资源
    最近更新 更多