保存许多人在Django鉴于许多领域在certein为了

问题描述:

我有Django应用程序一个多对多模式:保存许多人在Django鉴于许多领域在certein为了

class Colors(models.Model): 
    color = models.CharField(max_length=30) 

class Cars(models.Model): 
    brand = models.CharField(max_length=30) 

class Lote(models.Model): 
    adress = models.CharField(max_length=100) 
    cars = models.ManyToManyField(Cars) 
    color = models.ManyToManyField(Cars) 

我试着去保存新Lote()两个PK名单:

colors_pk = [1,2,3] 
cars_pk = [3,1,2] 

我的问题是:如果我救Lote()情况是这样的:

lote = Lote(adress='Some address') 
lote.save() 
lote.cars.add(cars_pk) 
lote.color.add(colors_pk) 

将颜色和汽车以与列表相同的顺序保存在m2m字段中?因为列表的顺序很重要 - colors_pkcars_pk通过索引相关,即汽车3链接到颜色1.

所以我应该怎么做?

+1

顺便说一句,通常型号名称是单数。 – Joseph 2014-09-24 22:43:16

我会重新设计你的模型作为这样的:

class Color(models.Model): 
    color = models.CharField(max_length=30) 

class Car(models.Model): 
    brand = models.CharField(max_length=30) 
    color = models.ManyToManyField(Color) 


class Lot(models.Model): 
    address = models.CharField(max_length=100) 
    cars = models.ManyToManyField(Car) 

这通过扩展留下相关卢特汽车和颜色,但可确保色彩正确链接到汽车。

+0

你可能意思是'ManyToManyField(Colors)',虽然这个设计也是错的 – yuvi 2014-09-24 22:41:03

+0

我做了,谢谢。虽然这个设计有什么问题?很难推断OP的用例是什么,但是这仍然可以满足原始设计的需求,而不需要特定的顺序,否? – Joseph 2014-09-24 22:42:37

+1

我回来了,你说得对。我认为从颜色向Cars添加一个'ForeignKey'会更有意义,但现在我意识到它实际上更好(因为你只定义了一种颜色)。这只是我尝试和避免“ManyToMany”的膝盖反应。所以你得到了我的+1。另外,不相关的:这将是很好的解决他的语法错误('Lot'而不是'Lote'和'address'而不是'adress') – yuvi 2014-09-24 22:45:55