我正在寫一個自定義表單控件,它覆蓋choice
method in django.forms.models.ModelChoiceIterator
:Django:如何從自定義小部件中獲取選定的值?
class CustomIterator(ModelChoiceIterator):
def choice(self, obj):
return (self.field.prepare_value(obj),
self.field.label_from_instance(obj), obj)
還有_get_choices
method on django.forms.models.ModelChoiceField
:
class CustomField(ModelChoiceField):
def _get_choices(self):
if hasattr(self, '_choices'):
return self._choices
return ElfIterator(self)
choices = property(_get_choices, ChoiceField._set_choices)
(我也跟着上this blog post的例子)
我需要創建一個完全自定義的小部件,根據HTML元素上的data-selected
屬性的值來選擇對象。我已經能夠獲得自定義HTML /使用實例的表單上顯示屬性的造型通過上述補充說:
from django.template.loader import render_to_string
class CustomWidget(Widget):
def render(self, name, value, attrs=None):
obj_list = [item[2] for item in self.choices]
obj_dict = [model_to_dict(obj) for obj in obj_list]
output = render_to_string('myapp/widgets/custom_widget.html',
{ 'obj_dict': obj_dict })
return mark_safe(output)
現在我試圖重寫這個同班value_from_datadict
方法,但是即使閱讀源代碼,我也不清楚如何在沒有Select小部件的情況下基於任意HTML屬性返回所選值。
出現如下錯誤:'未捕獲的ReferenceError:widgetName未定義'在'custom_widget.js'中。 – Dipak