如果选项列表中的对象具有FK到父对象,则ModelChoiceField会在HTML中添加属性selected
。
如何\我在哪里可以删除这个'选择'属性,以获得选择列表?要提及的是,我需要删除仅选择的'属性,即值本身不应从选择列表中删除。我需要以某种方式从python端挂钩,而不是从HTML挂钩。我试图在form
内的不同地方找到所需的属性,但没有运气。
有没有人知道Django代码的部分,其中检查选项列表中的对象是否有FK到父模型?
答案 0 :(得分:0)
我不知道它是否有效,但一个想法对你来说很清楚。
所以,我找到了Select
小部件的源代码,用于在html中设置selected
属性。它是here,只搜索selected_html
。
您可以尝试继承Select
小部件:
from django.forms.widgets import Select
class CustomSelect(Select):
def render_option(self, selected_choices, option_value, option_label):
if option_value is None:
option_value = ''
option_value = force_text(option_value)
if option_value in selected_choices:
selected_html = '' # make it empty string like in else statement or refactor all that method
if not self.allow_multiple_selected:
# Only allow for a single selection.
selected_choices.remove(option_value)
else:
selected_html = ''
return format_html('<option value="{}"{}>{}</option>', option_value, selected_html, force_text(option_label))
然后是表格
class YourForm(forms.Form):
your_field = forms.ModelChoiceField(widget=CustomSelect())
...
这是我提出的解决方案,我知道这不是那么优雅,但似乎没有简单的方法可以禁用selected
。