A bit of background…
I’m trying to create a custom auth backend and extend the user model. I’m using the following as a blue print:
For whatever reason, the ORM is generating invalid sql. It seems to want to do a inner join back to itself and it’s failing because it can’t find a field named user_ptr_id for the join.
If you do a search for this, it seems that I might not be the only one. And there is actually a reference to this in a comment on the blog post above. But, I can’t seem to fix it.
It seems like I should be able to override the SQL that is getting generated. Is that correct? From what I can tell, it seem like I might do this with a custom Object manager. Correct?
However, I can’t seem to find a good example of what I want to do. Everything that I see is wanting to inherit and chain them. That’s not really what I want to do. I sort of just want to say something like:
hey Django! on a select, use this SQL statement. etc
Is this possible? Maybe my “googlin'” is off today, but I can’t seem to find it. That leads me to believe I’m using wrong terms or something.
Please note: I’m using Django 1.3.1 with Python 2.6.5 and PostgreSQL 9.1
David,
Yes, you can override the behavior of a model by implementing an overriding Manager in the object. I found a great blog by Greg Allard on A Django Model Manager for Soft Deleting Records which runs through a soft delete, to set a field
deletedto True/False and only show objects that are not deleted, or all with deleted objects.With that in mind, I would think you could override your object’s all(), or filter() methods to get what you want. As an aside, everytime I have used a pointer, “ptr” is evident in the name of the field, it is because of class inheritance. For example,
class Animal():...,class Man(Animal):Man extends or is a subclass of Animal. In the database, the Man table will have an animal_ptr_id which “extends” the animal table’s tuple with that id as a Man with ANIMAL fields and MAN fields JOINed.