好吧,我認爲這是非常基本的,但由於我是Django的新手,我不知道如何處理這個問題。複製django模型實例的所有字段
我需要複製django模型的實例。如解釋here,複製ManyToMany關係存在問題。但是,附件「django-model-copying.diff」具有我想的功能。所以我不知道 - 我的Django已經有這個功能了嗎?我不知道該怎麼稱呼它。 幫助,將不勝感激。
好吧,我認爲這是非常基本的,但由於我是Django的新手,我不知道如何處理這個問題。複製django模型實例的所有字段
我需要複製django模型的實例。如解釋here,複製ManyToMany關係存在問題。但是,附件「django-model-copying.diff」具有我想的功能。所以我不知道 - 我的Django已經有這個功能了嗎?我不知道該怎麼稱呼它。 幫助,將不勝感激。
您只需做到以下幾點:
m = MyModel.objects.get(pk=1)
m.id = None
m.save()
這樣,新的實例將與課程的新id
任何unique
特性將在驗證過程中引發錯誤的情況下被創建。
注: 至於你所提到的功能 - 它沒有添加到主幹,狀態爲design decision needed
,但如果你知道你在做什麼,你可以將手動差異適用於你的Django實例 - 它被稱爲修補btw。以下是有關如何操作的詳細信息:http://ariejan.net/2007/07/03/how-to-create-and-apply-a-patch-with-subversion/。
docs包括如何做到這一點的指示 - 包括如何處理多對多的關係。
我會盡量回答你的實際問題,因爲你在問題中要求的是你提出的解決方案的問題,正如許多人指出的那樣並不是很理想。
在評論你提到這一點:
我會盡力解釋。所以,我們有2種型號:用戶和圖書。用戶有一本名爲「泰坦尼克號」的書,其中有一些內容。現在,另一個用戶也希望與該書有 關係。但是,第二個用戶想要的書完全一樣,但它應該被稱爲「Ship is going under」..我會複製 書,並重命名它。 - 我知道,我還可以將 書的內容放在另一個模型中 - 但我的模型稍微複雜一些。
看起來你有三樣東西來跟蹤:
對於每個Book
,存儲其共同的信息,例如:
class Author(models.Model):
name = models.CharField(max_length=50)
email = models.EmailField()
def __unicode__(self):
return unicode(self.name)
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.ManyToMany(Author)
isbn = models.CharField(max_length=13)
# and so on
def __unicode__(self):
return unicode(self.title)
現在,你需要存儲書籍 - >用戶關係,比如一個用戶都可以有很多書,兩個用戶可以擁有同一本書,附有自己的元信息。
class BookClub(models.Model):
username = models.ForeignKey(User)
book = models.ForeignKey(Book)
comments = models.TextField()
如果你組織你的模型那樣,你就可以做這樣的查詢:「多少書沒有每個成員都有」
值得注意的是,從django 1.8開始,你可能有UUIDFields
。如果複製模型實例,然後將其保存在unique
約束將無法在此列,在這種情況下,你必須做一些事情,如:
import uuid
m = MyModel.objects.get(pk=1)
m.pk = None
m.uuid = uuid.uuid4() //generate new uuid
m.save()
「我需要複製整個Django的模式」?你的意思是克隆一個模型的實例 - 即克隆數據庫中的一行。這通常是一個可怕的想法。你爲什麼要克隆數據庫行?數據關係模型的重點是克隆一行不必要的。你在做什麼? – 2010-09-30 19:46:57
是的,你的權利 - 我需要複製一個模型的實例..我想複製一個實例的所有屬性和關係到其他模型..你知道,我想過冗餘和東西 - 但對於我的問題 - 它是最好的方法來複制它。 – Peter 2010-09-30 19:57:19
@Peter:「但對我的問題 - 這是最好的方法來複制它」。對不起,但事實並非如此。它不可能。你在數據庫中有「關係」,這使得這完全沒有必要。也許在你走得太遠之前,你需要修正你的數據模型。 – 2010-09-30 20:02:44