Django DRF gettiing ValueError: Поле 'id' ожидало число, но получило ошибку 'test'
Я пытаюсь реализовать функцию фильтрации в моем приложении Django. Я использую DRF и получаю следующую ошибку, когда я нажимаю на любую опцию в моем html шаблоне:
ValueError: Field 'id' expected a number but got 'test'.
Я следовал этой записи для создания этой страницы, но я не уверен, как избавиться от ошибки. Я пытался изменить default в моем файле миграции, но это не помогло. Когда я меняю values_list('client_type__title') на values_list('client_type') все в порядке, но вместо заголовка показывается id.
файл миграции
class Migration(migrations.Migration):
dependencies = [
('testapp', '0007_team_publish'),
]
operations = [
migrations.CreateModel(
name='ClientType',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(default='-', help_text='max 150 characters', max_length=150)),
('body', models.CharField(default='-', help_text='max 400 characters', max_length=400, verbose_name='Description')),
('slug', models.SlugField(blank=True, default='')),
('publish', models.DateTimeField(default=django.utils.timezone.now, verbose_name='publish')),
],
options={
'ordering': ('-publish',),
'get_latest_by': 'publish',
},
),
migrations.AddField(
model_name='product',
name='client_type',
field=models.ManyToManyField(blank=True, related_name='client_type_product', to='testapp.ClientType', default='-'),
),
]
models.py
class ClientType(models.Model):
title = models.CharField(max_length=150, default='-', blank=False, null=False, help_text='max 150 characters')
body = models.CharField(verbose_name ='Description', max_length=400, default='-', blank=False, null=False, help_text='max 400 characters')
slug = models.SlugField(default='', blank=True)
publish = models.DateTimeField('publish', default=timezone.now)
def __str__(self):
return str(self.title)
class Product(models.Model):
id = models.AutoField(primary_key=True)
title = models.CharField('title', max_length=400, blank=False, null=False, help_text='max 400 characters', default='')
client_type = models.ManyToManyField(ClientType, related_name='client_type_product', blank=True, default='-')
publish = models.DateTimeField('Published on', default=timezone.now)
views.py
def get_client_types(request):
if request.method == "GET" and request.is_ajax():
client_types = Product.objects.exclude(client_type__isnull=True).order_by('client_type').values_list('client_type__title').distinct()
client_types = [i[0] for i in list(client_types)]
data = {
"client_types": client_types,
}
return JsonResponse(data, status = 200)
urls.py
urlpatterns = [
path("ajax/client_type/", views.get_client_types, name = 'get_client_types'),
]
test.js
РЕДАКТИРОВАНИЕ:
Я также добавил StringRelatedField и он показывает мне текстовые значения, но только в моей таблице. В фильтрах ничего не меняется.
class ProductSerializers(serializers.ModelSerializer):
client_type = serializers.StringRelatedField(many=True, read_only=True)
class Meta:
model = Product
fields = '__all__'