У меня есть две таблицы, у них один и тот же столбец "maid", и у некоторых (вместо всех) код единицы горничной - "U", у них есть единицы измерения в таблице dep.Я хочу получить единицы, когда девайс адреса существует в dep.Результат, который я хочу, выглядит следующим образом:
[ {
"addline": "14075 110A Ave",
"city": "Surrey",
"unitcode": "U",
"maid": 113091
},
{
"addline": "14143 110A Ave",
"city": "Surrey",
"unitcode": "S",
"maid": 113104,
"unit": [ "A-101", "A-102", "A-103", "A-104"]
}
]
Мой файл views.py такой, как показано ниже:
def list(self, request, city):
if city is not None:
queryset = address.objects.filter(city__icontains=city)
serializer = ResultSerializer(queryset, many=True)
return Response(serializer.data)
Мои модели такие, как показано ниже:
class address(models.Model):
maid = models.IntegerField(primary_key=True, unique=True)
fulladdress = models.CharField(max_length=120)
city = models.CharField(max_length=120)
unitcode = models.CharField(max_length=120)
class dep(models.Model):
maid = models.IntegerField()
Unit = models.CharField(max_length=120)
Имой serializers.py такой, как показано ниже:
class DepSerializer(serializers.ModelSerializer):
class Meta:
model = dep
fields = ('Unit', )
class ResultSerializer(serializers.ModelSerializer):
units = serializers.SerializerMethodField('get_unit')
def get_unit(self, queryset):
queryset_unit = dep.objects.filter(maid=queryset.maid)
serializer = DepSerializer(instance=queryset_unit, many=True)
return serializer.data
class Meta:
model = address
fields = ('fulladdress', 'city', 'unitcode', 'units')
Кажется, все в порядке, но ответ сервера составляет 500. Я был поражен этой проблемой почти весь день, кто-нибудь может спасти меня?
Обновление:
После закрытия кнопки отладки я обнаружил реальную проблему:
LINE 1: ..."Unit" FROM "Company_dep" WHERE "Company_dep"."maid" = 73643
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
Как мне кажется, проблема в этом коде:
queryset_unit = dep.objects.filter(maid=queryset.maid)
Потому чтонекоторые из горничных не имеют модуля, как может пройти, когда горничная не существует в dep?
update2:
После открытой отладки, наконец, я нашел проблему, причина почемучто в моем PostgreSql maid - это varchar, а в models.py я установил его как IntegerField.
Просто измените этот код:
maid = models.CharField(max_length=120)