Как правильно загрузить данные в ComboBox в Django с помощью m3_ext и objectpack?
Я разрабатываю Django-приложение, используя m3_ext и objectpack для UI-компонентов. Мне нужно загружать объекты ContentType в ComboBox непосредственно из базы данных. Однако моя текущая реализация не работает так, как ожидалось. Комбобокс не показывает ContentType существующей записи при редактировании. Вы все еще можете выбирать из комбобокса, но мне действительно нужно, чтобы существующее значение пихалось в комбобокс для редактирования.
from objectpack.actions import ObjectPack
from objectpack.ui import ModelEditWindow, BaseEditWindow, make_combo_box
from django.contrib.contenttypes.models import ContentType
from django.contrib.auth.models import Permission, Group, User
from m3_ext.ui import all_components as ext
class ContentTypePack(ObjectPack):
model = ContentType
add_to_desktop = True
add_window = edit_window = ModelEditWindow.fabricate(ContentType)
class PermissionEditWindow(BaseEditWindow):
def _init_components(self):
super(PermissionEditWindow, self)._init_components()
self.field__name = ext.ExtStringField(
label='Name',
name='name',
allow_blank=False,
anchor='100%')
self.field__content_type = make_combo_box(
label='Content Type',
name='ContentType',
allow_blank=False,
anchor='100%',
data=[(ct.id, ct.model) for ct in ContentType.objects.all()])
self.field__codename = ext.ExtStringField(
label='Codename',
name='codename',
allow_blank=False,
anchor='100%')
def _do_layout(self):
super(PermissionEditWindow, self)._do_layout()
self.form.items.extend((
self.field__name,
self.field__content_type,
self.field__codename,
))
def set_params(self, params):
super(PermissionEditWindow, self).set_params(params)
self.height = 'auto'
class PermissionPack(ObjectPack):
model = Permission
add_to_desktop = True
add_window = edit_window = PermissionEditWindow
def save_row(self, obj, create_new, request, context):
obj.name = request.POST.get('name')
content_type_id = request.POST.get('ContentType')
if content_type_id:
obj.content_type = ContentType.objects.get(pk=content_type_id)
obj.codename = request.POST.get('codename')
obj.save()
return obj
В окне редактирования тип содержимого пуст
Я уже пробовал изменить строку имени с 'ContentType' на 'content_type', после чего в комбобоксе отображается, какой ContentType назначен в данный момент, но при попытке сохранить запись выскакивает ошибка. Я ожидаю, что окно редактирования записи Permission будет наследовать значение ContentType с возможностью выбора ContentType из комбинированного окна Existing ContentType Ошибка