2010-05-12 84 views
1

如何将外键数据从一个对象复制到另一个对象?django将外键数据复制到另一个模型

例如

#models.py 
class ModelA(models.Model) 
    field1 = models.CharField(max_length=10) 

class ModelB(models.Model) 
    field2 = models.CharField(max_length=10) 
    field3 = models.ForeignKey(ModelA) 

#views.py 
a = ModelA(field1 = 'hello') 
b = ModelB(field2 = 'goodbye', field3 = a) 
c = ModelB(field2 = 'goodbye again', field3 = a) 

d = ModelA(field1 = 'another') 

我现在想给d一样的外键数据。即记录b和c。

感谢 约翰

回答

1

好吧,如果我明白你想要什么。 你必须修改你的模型:

#models.py 
class ModelA(models.Model) 
    field1 = models.CharField(max_length=10) 
    field2 = models.ForeignKey(ModelA) 

class ModelB(models.Model) 
    field3 = models.CharField(max_length=10) 

所以,你可以这样做:

#views.py 
b = ModelB(field3 = 'goodbye') 
c = ModelB(field3 = 'goodbye again') 
a = ModelA(field1 = 'hello', field2 = [b, c]) 

d = ModelA(field1 = 'another', field2 = a.field2) 

或者,如果你希望将自己的模型,你可以这样做:

#models.py 
class ModelA(models.Model) 
    field1 = models.CharField(max_length=10) 

class ModelB(models.Model) 
    field2 = models.CharField(max_length=10) 
    field3 = models.ForeignKey(ModelA) 

#views.py 
a = ModelA(field1 = 'hello') 
b = ModelB(field2 = 'goodbye', field3 = a) 
c = ModelB(field2 = 'goodbye again', field3 = a) 


d = ModelA(field1 = 'another') 


#here you get all the objects related to "a" 
query = ModelB.objects.filter(field3=a) 

#iterated over them 
for obj in query: 
    obj.field3 = d 

另一种方式,我认为它可以是你想要的是:

#models.py 
class ModelA(models.Model) 
    field1 = models.CharField(max_length=10) 
    field2 = models.ForeignKey(ModelA) 

class ModelB(models.Model) 
    field3 = models.CharField(max_length=10) 
    field4 = models.ForeignKey(ModelA) 

#views.py 
a = ModelA(field1 = 'hello') 
b = ModelB(field3 = 'goodbye', field4 = a) 
c = ModelB(field3 = 'goodbye again', field4 = a) 


d = ModelA(field1 = 'another', field2 = a) 

我认为这是完成的。但我不知道,我希望它对你有用。 ^^

+0

这不是一个答案。请删除并重新发布评论。 – 2010-05-12 18:41:14

+0

增加了一个例子。希望这可以帮助 – John 2010-05-13 09:17:09

0

我不清楚究竟上你问。我假设它是超过

foo.fk_field = bar.fk_field 
+0

我想这会将外键数据从一个模型更改为另一个模型。我想复制它,以便foo和bar都具有相同的外键数据(相同数据的重复副本,而不是实际上相同的记录) – John 2010-05-13 08:16:05

相关问题