Coverage for apis_core / relations / forms / fields.py: 0%
23 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-05-05 11:37 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-05-05 11:37 +0000
1from django import forms
2from django.urls import reverse
4from apis_core.core.fields import ApisListSelect2
5from apis_core.relations.utils import relation_content_types
8def list_relation_choices(model=None):
9 return [
10 (rel.id, rel.model_class().name())
11 for rel in relation_content_types(any_model=model)
12 ]
15class RelationMultiWidget(forms.MultiWidget):
16 template_name = "relations/relation_multiwidget.html"
17 use_fieldset = False
19 def __init__(self, attrs=None, choices=[]):
20 relation_choices = [(None, "---")] + choices
21 widgets = [
22 forms.widgets.Select(choices=relation_choices),
23 ApisListSelect2(url=reverse("apis_core:apis_entities:autocomplete")),
24 ]
25 super().__init__(widgets)
27 def decompress(self, value):
28 return [value, value]
31class RelationField(forms.MultiValueField):
32 def __init__(self, model=None, *args, **kwargs):
33 choices = list_relation_choices(model)
34 self.widget = RelationMultiWidget(choices=choices)
35 fields = (forms.ChoiceField(choices=choices), forms.CharField())
36 super().__init__(fields=fields, *args, **kwargs)
38 def compress(self, data_list):
39 return data_list