bennylope / django-organizations

:couple: Multi-user accounts for Django projects

Home Page:http://django-organizations.readthedocs.org/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Custom related_name between Organization, OrganizationOwner, and OrganizationUser

n8sty opened this issue · comments

I'm trying to add django-organizations to a nascent project and it looks like it should do nearly exactly what I want except for one thing. I'm using a sub-classed OrganizationUser model from OrganizationUserBase. The relation between the org, owner, and user in the database is specified in terms of organization_id, and organization_user_id regardless of the name of my subclassed objects and regardless of what I put for default_related_name in model meta. I poked around this projects code and it looks like there are a few places that might rely on explicitly having these relationships named like this - I'm wondering how necessary is this? Is it something that could be changed? If I manually foreign key my models together using a different name than the one provided how much functionality will break?

Example:

class Lab(OrganizationBase, TimestampBase, UUIDBase):
    name = models.CharField(max_length=255, help_text=_("What is the lab's name?"))

    class Meta(TimestampBase.Meta):
        db_table = "lab"
        default_related_name = "lab"
        verbose_name = _("lab")
        verbose_name_plural = _("labs")


class LabUser(OrganizationUserBase, TimestampBase, UUIDBase):
    email = models.EmailField(
        blank=True, default="", help_text=_("What is the user's email address?")
    )

    class Meta(TimestampBase.Meta):
        db_table = "lab_user"
        default_related_name = "lab_user"
        verbose_name = _("lab user")
        verbose_name_plural = _("lab users")


class LabOwner(OrganizationOwnerBase, TimestampBase, UUIDBase):
    
    class Meta(TimestampBase.Meta):
        db_table = "lab_owner"
        default_related_name = "lab_owner"
        verbose_name = _("lab owner")

results in a database schema where lab_owner has a foreign key named organization_id and organization_user_id.

This isn't a deal breaker, but it makes it more difficult to use the database directly because my app doesn't embrace the concept of organizations.

I poked around this projects code and it looks like there are a few places that might rely on explicitly having these relationships named like this - I'm wondering how necessary is this?

Strictly speaking, I don't think it's absolutely necessary. We'd just need to be able to introspect the related name.

Is it something that could be changed?

Yes, I do think so. And provided it was not backwards incompatible it would be a welcome addition. Is it something you'd have interest in writing a PR for?

Yes, I do think so. And provided it was not backwards incompatible it would be a welcome addition. Is it something you'd have interest in writing a PR for?

Very much so. I haven't had a chance to make material process on the project that would require this change but I should be (re-)beginning work soon and assuming that this is still useful to me I'll take a crack at making the above change.