On Aug 5, 12:32 am, v0idnull <v0idn...@gmail.com> wrote:
> I want to be able to link one model to another model, regardless of
> what models they are. Articles can be related to Photos, Videos, other
> Articles, etc etc etc.
>
> I have created a Relationship model to represent these relationships,
> but I'm unsure if this is the best solution. First off, my
> requirements include having a title, description, type, and priority
> to further describe the relationship.
>
> Secondly, I am using UUIDs for primary keys so I created a custom
> field to represent this (postgresql has a UUID field as well).
>
> Thirdly, I don't plan on using the out-of-box admin console, so
> whether or not a particular pattern works well in the admin console or
> not is not relevant for me.
>
> The following model accurately represents what I need, and in theory
> it works well. I can now have an abstract model that all my other
> models inherit, with an addRelationship(self, destination) method and
> various other methods to fetch relationships. In this abstract class,
> I also have this:
>
> from django.contrib.contenttypes.models import ContentType
>
> class Abstract(models.Model):
>     ...
>     def getType(self):
>         if (self._type == None):
>             self._type = ContentType.objects.get_for_model(self)
>         return self._type
>
> In order to make my life easier, as you'll see in my model below.
>
> I would like opinions about my approach, I am new to python, and newer
> still to Django. There might be things I am overlooking due to my
> ignorance.
>
> class Relationship(models.Model):
>
>     id = fields.UUID(auto_add=True,primary_key=True, unique=True)
>     created_by = fields.UUID(db_index=True,null=True,blank=True)
>     created_on = models.DateField(auto_now=False,auto_now_add=True)
>     modfied_on = models.DateField(auto_now=True,auto_now_add=False)
>     title = models.CharField(max_length=255)
>
>     source_id = fields.UUID(db_index=True)
>     source_app_label = models.CharField(db_index=True,max_length=255)
>     source_model = models.CharField(db_index=True,max_length=255)
>     destination_id = fields.UUID(db_index=True)
>     destination_app_label =
> models.CharField(db_index=True,max_length=255)
>     destination_model = models.CharField(db_index=True,max_length=255)
>
>     description = models.TextField(null=True,blank=True)
>     type =
> models.CharField(max_length=64,null=True,blank=True,db_index=True)
>     priority = models.PositiveIntegerField()
>
> Thanks in advance...

There is an out-of-the-box feature that does exactly this, Generic
Relationships. See 
http://docs.djangoproject.com/en/1.2/ref/contrib/contenttypes/#generic-relations
--
DR.

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-us...@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to