Skip to content

Commit 5e34237

Browse files
committed
Fixed null values for Django - fixes pgvector#35
1 parent 454ec2d commit 5e34237

File tree

3 files changed

+16
-3
lines changed

3 files changed

+16
-3
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 0.2.3 (unreleased)
2+
3+
- Fixed null values for Django
4+
15
## 0.2.2 (2023-09-08)
26

37
- Added support for Peewee

pgvector/django/__init__.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ def __init__(self):
1616
# https://docs.djangoproject.com/en/4.2/howto/custom-model-fields/
1717
class VectorField(Field):
1818
description = 'Vector'
19+
empty_strings_allowed = False
1920

2021
def __init__(self, *args, dimensions=None, **kwargs):
2122
self.dimensions = dimensions
@@ -47,10 +48,14 @@ def value_to_string(self, obj):
4748
return self.get_prep_value(self.value_from_object(obj))
4849

4950
def validate(self, value, model_instance):
50-
super().validate(value.tolist(), model_instance)
51+
if isinstance(value, np.ndarray):
52+
value = value.tolist()
53+
super().validate(value, model_instance)
5154

5255
def run_validators(self, value):
53-
super().run_validators(value.tolist())
56+
if isinstance(value, np.ndarray):
57+
value = value.tolist()
58+
super().run_validators(value)
5459

5560
def formfield(self, **kwargs):
5661
return super().formfield(form_class=VectorFormField, **kwargs)

tests/test_django.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ class Migration(migrations.Migration):
5656
name='Item',
5757
fields=[
5858
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
59-
('embedding', pgvector.django.VectorField(dimensions=3)),
59+
('embedding', pgvector.django.VectorField(dimensions=3, null=True)),
6060
],
6161
),
6262
migrations.AddIndex(
@@ -185,3 +185,7 @@ def test_clean(self):
185185

186186
def test_get_or_create(self):
187187
Item.objects.get_or_create(embedding=[1, 2, 3])
188+
189+
def test_missing(self):
190+
Item().save()
191+
assert Item.objects.first().embedding is None

0 commit comments

Comments
 (0)