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

1from django import forms 

2from django.urls import reverse 

3 

4from apis_core.core.fields import ApisListSelect2 

5from apis_core.relations.utils import relation_content_types 

6 

7 

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 ] 

13 

14 

15class RelationMultiWidget(forms.MultiWidget): 

16 template_name = "relations/relation_multiwidget.html" 

17 use_fieldset = False 

18 

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) 

26 

27 def decompress(self, value): 

28 return [value, value] 

29 

30 

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) 

37 

38 def compress(self, data_list): 

39 return data_list