Monday, November 21, 2022

Re: join on plain integerfield

That's sort of how generic relations[1] work. You might be able to make it fit.

[1] https://docs.djangoproject.com/en/4.1/ref/contrib/contenttypes/#generic-relations

On November 21, 2022 4:11:25 AM CST, Marek Rouchal <marek.rou@gmail.com> wrote:

I need to access an existing database whose schema I cannot alter; I used the Django tool to extract the tables to create models.py, which worked great, and I already hacked some model definitions, e.g. to replace a simple IntegerField with a ForeignKey. But there are specific tables, where there is an IntegerField which may contain a ForeignKey from more than one table (think of a group and a user table; whether the reference is a user or a group, is defined by another column):

class Permission(models.Model):
    ...
    user_or_group_id = models.IntegerField(db_column='user_or_group_id', blank=True, null=True)
    is_group = models.IntegerField(db_column='is_group', blank=True, null=True)

So what I would need here is something like a union on ForeignKey (coming from either a User or a Group table) in the model, but I guess that does not exist?
So I used raw SQL for the required joins; I have not been able to formulate a Django queryset to join on a field which is not modeled with ForeignKey.
That is why I was asking for some better support of raw SQL, reference is this ticket: https://code.djangoproject.com/ticket/34168

Any suggestion how I can model such an integerfield, so that I can do joins on it using the Django ORM queryset syntax?

No comments:

Post a Comment