Html 问:Django crispy表单-根据url改变行为
我不知道如何用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:
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
谢谢!视图
部分正是我所需要的