我的內容模型與標記模型具有多對多關係。當我保存一個Content對象時,我想動態地添加這些關係。我以下面的方式做這件事。在Django的保存方法中動態添加多對多關係
# models.py
def tag_content(content_id):
obj = Content.objects.get(pk=content_id)
print obj # Checking
obj.tags = [1, 2, 3] # Adding the relationships using the Tag IDs
class Tag(models.Model):
name = models.CharField(max_length=255)
class Content(models.Model):
title = models.CharField(max_length=255)
is_tagged = models.BooleanField(default=False)
tags = models.ManyToManyField(Tag, blank=True)
def save(self, *args, **kwargs):
super(Content, self).save(*args, **kwargs)
if not self.is_tagged:
tag_content(self.pk) # calling the tagging method
換句話說,當內容物被保存,它的標籤字段與3個不同的標籤對象模型。只是爲了讓你知道,我確實在數據庫中有pks = 1,2和3的標籤。
但是,這根本行不通。 save方法調用tag_content方法,因爲print obj語句有效。但是,多對多字段未設置並保持空白。有趣的是,如果我在shell中運行以下命令,標記字段將完全設置。
# python manage.py shell
from myapp.models import *
obj = Content.objects.get(pk=1)
tag_content(obj.pk)
那麼shell的版本是如何工作的,但另一個沒有?任何幫助表示讚賞。
不是你問題的原因,但你爲什麼不將內容項本身傳遞給tag_content而不是pk?然後你不必從數據庫中重新查詢它。 –
好點。會做到這一點。但正如你所說,不是解決我的問題。 –