python - Django and Postgresql operator does not exist: integer = character varying -
i have these 2 models:
class cachedrecord(models.model): recordname = models.charfield(max_length=100,primary_key=true) recordcount = models.integerfield() def __unicode__(self): return self.recordname class cachedrecorddata(models.model): record = models.foreignkey(cachedrecord) data = models.charfield(max_length=100) def __unicode__(self): return self.data when try delete cachedrecord admin panel errror:
programmingerror @ /admin/myapp/cachedrecord/ operator not exist: integer = character varying line 1: ...on ( "myapp_cachedrecorddata"."record_id" = "myapp... ^ hint: no operator matches given name , argument type(s). might need add explicit type casts. i have found many questions (so might duplicate), don't understand answer.
where need add these castings in django?
you have set character field (recordname) primary key cachedrecord.
django created automatic primary key (of type integer) cachedrecorddata called id - since there no primary key specified in model definition.
now when try delete cachedrecord, django creating primary key lookup make sure related cachedrecorddata instances deleted, , since 1 key character , other integer - database giving error.
the easiest way solve problem remove primary_key=true recordname , let django manage keys correctly. can add index on column, or other constraints (for example, set unique=true).
you have similar problem here:
def __unicode__(self): return self.recordname+":"+self.recordcount you adding string ':' self.recordcount result in typeerror exception, cannot combine string number:
>>> ':'+3 traceback (most recent call last): file "<stdin>", line 1, in <module> typeerror: cannot concatenate 'str' , 'int' objects to solve issue:
def __unicode__(self): return u'{}:{}'.format(self.recordname, self.recordcount)
Comments
Post a Comment