2016-02-04 32 views
0

我有以下型號:Django的:複製和更新查詢集

class A(models.Model): 
    pass 

class B(models.Model): 
    a = models.ForeignKey(A, related_name="bs") 

然後我有,我創建對象A的新紀錄功能,我想給所有相關的記錄複製的B

我做了一些事,如

def foo(new_a, old_a): 
    old_a.bs.all().update(pk=None, a=new_a) 

,但我得到以下錯誤 ERROR - failed to write data to stream: <open file '<stdout>', mode 'w' at 0x7f207949a150>

回答

3

做這樣的事情

def foo(new_a, old_a): 
    old_a.bs.all().update(pk=None) 

將嘗試設置pk=None上的所有bsold_a這是不是你想要的。

相反,你會想要做的事,如:

for b in old_a.bs.all(): 
    b.pk = None # make sure you're not overwriting the existing record 
    b.a = new_a 
    b.save() 

我想你也應該能夠使用bulk_create更有效地做到這一點:

new_bs = [] 
for b in old_a.bs.all(): 
    b.pk = None # make sure you're not overwriting the existing record 
    b.a = new_a 
    new_bs.append(b) 

B.objects.bulk_create(new_bs) 
+0

的完美謝謝 – Alexis

8

希望有所幫助:

query_set = B.objects.filter(something=a).values() 

for k in query_set: 
    A.objects.bulk_create(**k) 
+0

謝謝,除了我必須設置'new_a' – Alexis

+0

您的歡迎@亞歷克斯 –