Mam proste kwerendy w Django zbudowanych w komentarzach modelu i uzyskiwanie błąd poniżej z bazy danych PostgreSQL Heroku za:heroku, postgreSQL, django, komentarze, tastypie: Żaden operator nie pasuje do podanej nazwy i typu argumentu. Być może trzeba dodać wyraźny typ rzuca
DatabaseError: operator does not exist: integer = text LINE 1:
... INNER JOIN "django_comments" ON ("pi ns_pin"."id" = "django_...
^
HINT: No operator matches the given name and argument type(s).
You might need to add explicit type casts.
Po googling wokół wydaje się ten błąd został rozwiązany wiele razy wcześniej w django, ale wciąż go otrzymuję (wszystkie powiązane kwestie zostały zamknięte 3-5 lat temu). Używam wersji 1.4 django i najnowszej wersji programu tastypie.
Zapytanie jest wykonany pod filtrami ORM i doskonale współpracuje z moim bazy rozwojowej (sqlite3):
class MyResource(ModelResource):
comments = fields.ToManyField('my.api.api.CmntResource', 'comments', full=True, null=True)
def build_filters(self, filters=None):
if filters is None:
filters = {}
orm_filters = super(MyResource, self).build_filters(filters)
if 'cmnts' in filters:
orm_filters['comments__user__id__exact'] = filters['cmnts']
class CmntResource(ModelResource):
user = fields.ToOneField('my.api.api.UserResource', 'user', full=True)
site_id = fields.CharField(attribute = 'site_id')
content_object = GenericForeignKeyField({
My: MyResource,
}, 'content_object')
username = fields.CharField(attribute = 'user__username', null=True)
user_id = fields.CharField(attribute = 'user__id', null=True)
ktoś ma jakieś doświadczenia z poruszania się tego błędu bez pisania surowego SQL?
Podobnie jak w przypadku błędu, próbujesz porównać liczbę całkowitą z wartością tekstową. Przestań to robić, a błąd zniknie. –
Nawiasem mówiąc, jest to dobry przykład, dlaczego testowanie powinno odbywać się w środowisku możliwie najbardziej podobnym do miejsca, w którym się wdrażasz: niezależnie od tego, jak wiele frameworka twierdzi, że to abstrakcja, coś tak złożonego, jak DBMS, z pewnością będzie miało inne zachowanie i ograniczenia . – IMSoP
IMSoP, tak naprawdę dzisiaj nauczyłem się tej lekcji! Właśnie zmieniłem DB mojego rozwoju do PostgreSQL, aby pracować nad tym problemem. – arctelix