Django: How can I add weight/ordering to a many to many relationship?

Posted by Klaas van Schelven on Stack Overflow See other posts from Stack Overflow or by Klaas van Schelven
Published on 2010-06-17T20:50:50Z Indexed on 2010/06/17 20:53 UTC
Read the original article Hit count: 204

Filed under:
|

I'm having Pages with TextBlocks on them. Text Blocks may appear on different pages, pages may have several text blocks on them. Every page may have these blocks in an ordering of it's own. This can be solved by using a separate through parameter. Like so:

class TextBlock(models.Model):
    title = models.CharField(max_length=255)
    text = models.TextField()

class Page(models.Model):
    textblocks = models.ManyToManyField(TextBlock, through=OrderedTextBlock)

class OrderedTextBlock(models.Model):
    text_block = models.ForeignKey(TextBlock)
    product_page = models.ForeignKey(ProductPage)
    weight = models.IntegerField()

    class Meta:
        ordering = ('weight',)

But I'm not very enthousiastic about the violations of DRY for my app. (There's a lot of ordered ManyToMany relations). Is there a recommended way to go about this?

© Stack Overflow or respective owner

Related posts about django

Related posts about django-models