2013-06-27 37 views
1

我正面臨一個有趣的問題,我不知道它是否是一個問題,但它沒有提供我需要的預期值。例如,這裏是我的兩個模型。以正確順序添加ManyToManyField

class Name(models.Model): 
    """ """ 
    name = models.CharField(max_length=20) 


class Dir(models.Model): 
    name = models.ForeignKey(Name) 
    children = models.ManyToManyField('Dir', null=True, blank=True, related_name="dirs") 

例如,我在兒童'A','B'中添加了兩個目錄。現在我想按照我添加的順序找回我的兩個孩子。但問題是,它是按照下面的順序提供給我的。 'B','A'。如何保持訂單與我添加的完全相同?

+0

由於Django在涉及'm2m'字段時無法保證廣告插入順序的保存,因此您必須執行'直通表'並定義其中的排序。 –

+0

謝謝。但是,我怎麼能通過這裏使用模型和它的孩子具有相同的名稱'迪爾'?我嘗試過,但無法真正理解如何製作。 – user968677

+0

你有試過嗎? '類DirEntry(models.Model):' '父= models.ForeignKey(DIR)' '孩子= models.ForeignKey(DIR)' '爲了= models.IntegerField()' 但至於我,帶'through'的'ManyToManyField'具有太多限制 - 例如沒有'add()','create()'方法,管理器將無法工作(我的意思是用一些過濾器重新定義'Dir.objects') - 更好地使用外鍵的中間模型。 – HighCat

回答

-1

您可以通過關係標識訂購目錄:

parent = Dir(name='parent') 
parent.dirs.add(Dir(name='A')) 
parent.dirs.add(Dir(name='B')) 
children = Dir.dirs.all().order_by('id') # or '-id' if you need reverse order. 

只有當您使用through屬性來定義中介表。

+1

插入ID有時不會給我的模型結構預期的輸出,但這是很好的提示,謝謝。現在我定義了我自己的'dir_id'字段,並在插入值時以正確的順序賦值。現在我可以看到正確的輸出。 – user968677

+0

我在中介模型上使用了一個created = models.DateTimeField(auto_now_add = True)來了解插入順序。然後我可以使用.order_by('created') –