新聞中心
這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)Django4.0教程:Django4.0執(zhí)行查詢-復(fù)制模型實(shí)例
盡管沒有用于復(fù)制模型實(shí)例的內(nèi)置方法,但可以輕松地創(chuàng)建復(fù)制所有字段值的新實(shí)例。在最簡單的情況下,您可以將 ?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
若你使用了集成,事情會更復(fù)雜。考慮下 ?Blog ?的一個子類:
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
該方法不會拷貝不是模型數(shù)據(jù)表中的關(guān)聯(lián)關(guān)系。例如, ?Entry ?有一個對 ?Author ?的 ?ManyToManyField ?關(guān)聯(lián)關(guān)系。在復(fù)制條目后,你必須為新條目設(shè)置多對多關(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)
對于 ?OneToOneField ?關(guān)聯(lián),你必須拷貝關(guān)聯(lián)對象,并將其指定給新對象的關(guān)聯(lián)字段,避免違反一對一唯一性約束。例如,指定前文復(fù)制的 ?entry?:
detail = EntryDetail.objects.all()[0]
detail.pk = None
detail._state.adding = True
detail.entry = entry
detail.save()
文章標(biāo)題:創(chuàng)新互聯(lián)Django4.0教程:Django4.0執(zhí)行查詢-復(fù)制模型實(shí)例
鏈接URL:http://m.5511xx.com/article/cogjpso.html


咨詢
建站咨詢
