0
我有這個代碼表填充。正確的方法來bulk_create ManyToMany領域,Django?
def add_tags(count):
print "Add tags"
insert_list = []
photo_pk_lower_bound = Photo.objects.all().order_by("id")[0].pk
photo_pk_upper_bound = Photo.objects.all().order_by("-id")[0].pk
for i in range(count):
t = Tag(tag = 'tag' + str(i))
insert_list.append(t)
Tag.objects.bulk_create(insert_list)
for i in range(count):
random_photo_pk = randint(photo_pk_lower_bound, photo_pk_upper_bound)
p = Photo.objects.get(pk = random_photo_pk)
t = Tag.objects.get(tag = 'tag' + str(i))
t.photos.add(p)
這是模型:
class Tag(models.Model):
tag = models.CharField(max_length=20,unique=True)
photos = models.ManyToManyField(Photo)
據我所知這樣的回答:Django: invalid keyword argument for this function我要救標籤對象第一(由於多對多場),然後通過add()
附加照片給他們。但對於大型count
這個過程需要很長時間。有沒有什麼方法可以重構這段代碼以使其更快?
通常我想用隨機虛擬數據填充標籤模型。
EDIT 1(模型照片)
class Photo(models.Model):
photo = models.ImageField(upload_to="images")
created_date = models.DateTimeField(auto_now=True)
user = models.ForeignKey(User)
def __unicode__(self):
return self.photo.name
嗨,對不起,延遲的答案。我可以說,你有正確的想法來使用'通過',我確實爲自己找到了同樣的解決方案,雖然這個功能在文檔上很短,你能爲我提供一些建議嗎?您是一位高級Python開發人員,至少與我相比,我必須閱讀一些文檔才能完全理解您的答案,但我必須承認,簡單的複製和過去對我來說並不適用。非常感謝你的幫助!我稍後會嘗試添加其他信息。 – Georgy
你可以發佈照片的模型定義嗎? –
對不起,我花了一段時間。該模型在編輯部分。 – Georgy