【发布时间】:2013-06-27 06:31:02
【问题描述】:
我面临一个有趣的问题,我不知道它是否是一个问题,但它没有给出我需要的预期值。以我的两个模型为例。
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'。如何保持订单与我添加的完全相同?
【问题讨论】:
-
由于 Django 不能保证在
m2m字段中保留插入顺序,因此您必须创建一个through表并在那里定义顺序。 -
谢谢。但是我怎么能在这里使用,因为模型和它的孩子有相同的名字 'Dir' ?我试过但不能真正理解如何制作。
-
你试过了吗?
class DirEntry(models.Model):parent = models.ForeignKey(Dir)child = models.ForeignKey(Dir)order = models.IntegerField()但对我来说,ManyToManyField和through有太多限制 - 例如。没有add()、create()方法和管理器将不起作用(我的意思是重新定义Dir.objects并带有一些过滤器)- 最好只使用外键的中间模型。 -
感谢 HighCat。我通过添加另一个字段“dir_id”解决了我的问题。看我下面的cmets。
标签: python django manytomanyfield