"Interface has no domain" when editing a machine
For an unknown reason, editing any interface on our instance of Re2o (dev branch, commit 850dcfb8) results in the following error:
Traceback:
File "/usr/lib/python3/dist-packages/django/core/handlers/exception.py" in inner
41. response = get_response(request)
File "/usr/lib/python3/dist-packages/django/core/handlers/base.py" in _legacy_get_response
249. response = self._get_response(request)
File "/usr/lib/python3/dist-packages/django/core/handlers/base.py" in _get_response
187. response = self.process_exception_by_middleware(e, request)
File "/usr/lib/python3/dist-packages/django/core/handlers/base.py" in _get_response
185. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/lib/python3/dist-packages/django/contrib/auth/decorators.py" in _wrapped_view
23. return view_func(request, *args, **kwargs)
File "/var/www/re2o/re2o/acl.py" in wrapper
259. return view(request, *chain(instances, args), **kwargs)
File "/var/www/re2o/machines/views.py" in edit_interface
294. request,
File "/var/www/re2o/re2o/views.py" in form
65. return render(request, template, context)
File "/usr/lib/python3/dist-packages/django/shortcuts.py" in render
30. content = loader.render_to_string(template_name, context, request, using=using)
File "/usr/lib/python3/dist-packages/django/template/loader.py" in render_to_string
68. return template.render(context, request)
File "/usr/lib/python3/dist-packages/django/template/backends/django.py" in render
66. return self.template.render(context)
File "/usr/lib/python3/dist-packages/django/template/base.py" in render
207. return self._render(context)
File "/usr/lib/python3/dist-packages/django/template/base.py" in _render
199. return self.nodelist.render(context)
File "/usr/lib/python3/dist-packages/django/template/base.py" in render
990. bit = node.render_annotated(context)
File "/usr/lib/python3/dist-packages/django/template/base.py" in render_annotated
957. return self.render(context)
File "/usr/lib/python3/dist-packages/django/template/loader_tags.py" in render
177. return compiled_parent._render(context)
File "/usr/lib/python3/dist-packages/django/template/base.py" in _render
199. return self.nodelist.render(context)
File "/usr/lib/python3/dist-packages/django/template/base.py" in render
990. bit = node.render_annotated(context)
File "/usr/lib/python3/dist-packages/django/template/base.py" in render_annotated
957. return self.render(context)
File "/usr/lib/python3/dist-packages/django/template/loader_tags.py" in render
177. return compiled_parent._render(context)
File "/usr/lib/python3/dist-packages/django/template/base.py" in _render
199. return self.nodelist.render(context)
File "/usr/lib/python3/dist-packages/django/template/base.py" in render
990. bit = node.render_annotated(context)
File "/usr/lib/python3/dist-packages/django/template/base.py" in render_annotated
957. return self.render(context)
File "/usr/lib/python3/dist-packages/django/template/loader_tags.py" in render
72. result = block.nodelist.render(context)
File "/usr/lib/python3/dist-packages/django/template/base.py" in render
990. bit = node.render_annotated(context)
File "/usr/lib/python3/dist-packages/django/template/base.py" in render_annotated
957. return self.render(context)
File "/usr/lib/python3/dist-packages/django/template/defaulttags.py" in render
322. return nodelist.render(context)
File "/usr/lib/python3/dist-packages/django/template/base.py" in render
990. bit = node.render_annotated(context)
File "/usr/lib/python3/dist-packages/django/template/base.py" in render_annotated
957. return self.render(context)
File "/usr/lib/python3/dist-packages/django/template/defaulttags.py" in render
322. return nodelist.render(context)
File "/usr/lib/python3/dist-packages/django/template/base.py" in render
990. bit = node.render_annotated(context)
File "/usr/lib/python3/dist-packages/django/template/base.py" in render_annotated
957. return self.render(context)
File "/usr/lib/python3/dist-packages/django/template/library.py" in render
203. output = self.func(*resolved_args, **resolved_kwargs)
File "/var/www/re2o/re2o/templatetags/massive_bootstrap_form.py" in massive_bootstrap_form
191. return mbf_form.render()
File "/var/www/re2o/re2o/templatetags/massive_bootstrap_form.py" in render
245. self.html += mbf_field.render()
File "/var/www/re2o/re2o/templatetags/massive_bootstrap_form.py" in render
401. self.gen_displayed_div()
File "/var/www/re2o/re2o/templatetags/massive_bootstrap_form.py" in gen_displayed_div
408. self.html += render_field(self.bound, *self.args, **self.kwargs)
File "/usr/local/lib/python3.7/dist-packages/bootstrap3/forms.py" in render_field
54. return renderer_cls(field, **kwargs).render()
File "/usr/local/lib/python3.7/dist-packages/bootstrap3/renderers.py" in render
85. return mark_safe(self._render())
File "/usr/local/lib/python3.7/dist-packages/bootstrap3/renderers.py" in _render
478. html = self.field.as_widget(attrs=self.widget.attrs)
File "/usr/lib/python3/dist-packages/django/forms/boundfield.py" in as_widget
127. **kwargs
File "/usr/lib/python3/dist-packages/django/forms/widgets.py" in render
220. context = self.get_context(name, value, attrs)
File "/usr/lib/python3/dist-packages/django/forms/widgets.py" in get_context
669. context = super(Select, self).get_context(name, value, attrs)
File "/usr/lib/python3/dist-packages/django/forms/widgets.py" in get_context
629. context['widget']['optgroups'] = self.optgroups(name, context['widget']['value'], attrs)
File "/usr/lib/python3/dist-packages/django/forms/widgets.py" in optgroups
577. for index, (option_value, option_label) in enumerate(chain(self.choices)):
File "/usr/lib/python3/dist-packages/django/forms/models.py" in __iter__
1140. yield self.choice(obj)
File "/usr/lib/python3/dist-packages/django/forms/models.py" in choice
1146. return (self.field.prepare_value(obj), self.field.label_from_instance(obj))
File "/usr/lib/python3/dist-packages/django/forms/models.py" in label_from_instance
1211. return force_text(obj)
File "/usr/lib/python3/dist-packages/django/utils/encoding.py" in force_text
76. s = six.text_type(s)
File "/var/www/re2o/machines/models.py" in __str__
328. return str(self.user) + " - " + str(self.id) + " - " + str(self.get_name)
File "/usr/lib/python3/dist-packages/django/utils/functional.py" in __get__
35. res = instance.__dict__[self.name] = self.func(instance)
File "/var/www/re2o/machines/models.py" in get_name
285. return self.name or self.short_name
File "/usr/lib/python3/dist-packages/django/utils/functional.py" in __get__
35. res = instance.__dict__[self.name] = self.func(instance)
File "/var/www/re2o/machines/models.py" in short_name
258. return str(interfaces_set.domain.name)
File "/usr/lib/python3/dist-packages/django/db/models/fields/related_descriptors.py" in __get__
407. self.related.get_accessor_name()
Exception Type: RelatedObjectDoesNotExist at /machines/edit_interface/4280
Exception Value: Interface has no domain.
It is possible to create a new Machine or Interface. Some interfaces can be deleted, but not all of them. Attempting to edit any Interface results in a crash.