W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
盡管沒有用于復(fù)制模型實(shí)例的內(nèi)置方法,但可以輕松地創(chuàng)建復(fù)制所有字段值的新實(shí)例。在最簡(jiǎn)單的情況下,您可以將 ?pk
?設(shè)置為 ?None
?并將 ?_state.adding
? 設(shè)置為 ?True
?。使用我們的博客示例:
blog = Blog(name='My blog', tagline='Blogging is easy')
blog.save() # blog.pk == 1
blog.pk = None
blog._state.adding = True
blog.save() # blog.pk == 2
若你使用了集成,事情會(huì)更復(fù)雜??紤]下 ?Blog
?的一個(gè)子類:
class ThemeBlog(Blog):
theme = models.CharField(max_length=200)
django_blog = ThemeBlog(name='Django', tagline='Django is easy', theme='python')
django_blog.save() # django_blog.pk == 3
由于繼承的工作原理,您必須將 ?pk
?和 ?id
?都設(shè)置為 ?None
?,并將 ?_state.adding
? 設(shè)置為 ?True
?:
django_blog.pk = None
django_blog.id = None
django_blog._state.adding = True
django_blog.save() # django_blog.pk == 4
該方法不會(huì)拷貝不是模型數(shù)據(jù)表中的關(guān)聯(lián)關(guān)系。例如, ?Entry
?有一個(gè)對(duì) ?Author
?的 ?ManyToManyField
?關(guān)聯(lián)關(guān)系。在復(fù)制條目后,你必須為新條目設(shè)置多對(duì)多關(guān)聯(lián)關(guān)系。
entry = Entry.objects.all()[0] # some previous entry
old_authors = entry.authors.all()
entry.pk = None
entry._state.adding = True
entry.save()
entry.authors.set(old_authors)
對(duì)于 ?OneToOneField
?關(guān)聯(lián),你必須拷貝關(guān)聯(lián)對(duì)象,并將其指定給新對(duì)象的關(guān)聯(lián)字段,避免違反一對(duì)一唯一性約束。例如,指定前文復(fù)制的 ?entry
?:
detail = EntryDetail.objects.all()[0]
detail.pk = None
detail._state.adding = True
detail.entry = entry
detail.save()
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: