Html 问:Django crispy表单-根据url改变行为

Html 问:Django crispy表单-根据url改变行为,html,django,python-3.x,django-crispy-forms,Html,Django,Python 3.x,Django Crispy Forms,我不知道如何用django crispy表单实现这一点 我有一个带有如下URL的界面: myurl.com/movements/new 我有一个选择的形式与类型的运动 当没有明确指定移动类型时,只显示“选择”,而不选择任何选项 当用户使用类似于myurl.com/movements/income/ 我希望此选择在默认情况下具有income选项 等等,每一个可能的选择 我知道我可以使用JavaScript来实现这一点,但我认为最好将其放在后端 如何在后端部件上实现这一点?models.py:

我不知道如何用django crispy表单实现这一点

我有一个带有如下URL的界面:

myurl.com/movements/new

我有一个选择的形式与类型的运动

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

当用户使用类似于
myurl.com/movements/income/
我希望此选择在默认情况下具有
income
选项

等等,每一个可能的选择

我知道我可以使用JavaScript来实现这一点,但我认为最好将其放在后端


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

models.py

class MyModel(models.Model):
    CHOICES = (
        ('Income', 'Income'),
        ('Option2', 'Option2'),
        ('Option3', 'Option3'),
    )
    choice = models.CharField(max_length=25, choices=CHOICES)
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'
    )
]
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
url.py

class MyModel(models.Model):
    CHOICES = (
        ('Income', 'Income'),
        ('Option2', 'Option2'),
        ('Option3', 'Option3'),
    )
    choice = models.CharField(max_length=25, choices=CHOICES)
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'
    )
]
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时,才会给出下拉列表的初始选择。当然,您可以根据需要调整URL


您也可以替代
获取表单\u kwargs

谢谢!
视图
部分正是我所需要的