2010-06-17 21 views
0

我在頁面上放置TextBlocks。文本塊可能出現在不同的頁面上,頁面上可能有幾個文本塊。每個頁面可以按照它自己的順序包含這些塊。 這可以通過使用單獨的參數來解決。像這樣:Django:我怎樣才能爲多對多的關係添加重量/排序?

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(Page) 
    weight = models.IntegerField() 

    class Meta: 
     ordering = ('weight',) 

但我不是非常intehousiastic關於DRY違反我的應用程序。 (有很多命令ManyToMany關係)。有沒有推薦的方法來解決這個問題?

編輯:錯字

回答

0

你可以,也許,創建自己的Custom Field - OrderedManyToManyField,也許,作爲ManyToManyField的subclass

或者,如果看起來不理想,你可以使用現有的方法,創建多個「到」模型,但彼此subclass them堅持幹成最好的,你可以

class OrderedM2M(models.Model): 
    weight = models.IntegerField() 

    class Meta: 
     ordering = ('weight',) 
     abstract = True 

class OrderedTextBlock(OrderedM2M): 
    text_block = models.ForeignKey(TextBlock) 
    product_page = models.ForeignKey(Page) 
+0

自定義字段一個很好的想法指向了這個方向: http://pypi.python.org/pypi/django-sortedm2m/0.2.0 – 2010-06-18 08:39:01

相關問題