Skip to content

Commit 6d41b79

Browse files
committed
Improved SparseVectorField forms for Django [skip ci]
1 parent 8d6da74 commit 6d41b79

File tree

2 files changed

+11
-2
lines changed

2 files changed

+11
-2
lines changed

pgvector/django/sparsevec.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,16 @@ def formfield(self, **kwargs):
3939
return super().formfield(form_class=SparseVectorFormField, **kwargs)
4040

4141

42+
class SparseVectorWidget(forms.TextInput):
43+
def format_value(self, value):
44+
if isinstance(value, SparseVector):
45+
value = value.to_text()
46+
return super().format_value(value)
47+
48+
4249
class SparseVectorFormField(forms.CharField):
50+
widget = SparseVectorWidget
51+
4352
def to_python(self, value):
4453
if isinstance(value, str) and value == '':
4554
return None

tests/test_django.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -373,8 +373,8 @@ def test_sparsevec_form_instance(self):
373373
Item(id=1, sparse_embedding=[1, 2, 3]).save()
374374
item = Item.objects.get(pk=1)
375375
form = SparseVectorForm(instance=item)
376-
# TODO fix
377-
# assert 'value="[1.0, 2.0, 3.0]"' in form.as_div()
376+
# TODO improve
377+
assert 'value="{1:1.0,2:2.0,3:3.0}/3"' in form.as_div()
378378

379379
def test_sparsevec_form_save(self):
380380
Item(id=1, sparse_embedding=[1, 2, 3]).save()

0 commit comments

Comments
 (0)