Python 在保存()之前使用多对多项目
我使用的模型具有多对多字段 我想做的就是这样Python 在保存()之前使用多对多项目,python,django,Python,Django,我使用的模型具有多对多字段 我想做的就是这样 tweets = fetchfromweb() filtered = [] for tweet in tweets: tweet.save() ## save and create manytomanyfield if tweet.text == x : tweet.genre.add(genreObj) tweet.save() else: tweet.remove() 从
tweets = fetchfromweb()
filtered = []
for tweet in tweets:
tweet.save() ## save and create manytomanyfield
if tweet.text == x :
tweet.genre.add(genreObj)
tweet.save()
else:
tweet.remove()
class Tweet(models.Model):
text = models.TextField(null=True)
genre = models.ManyToManyField(genre)
滤器
tweets = fetchfromweb()
filtered = []
for tweet in tweets:
if tweet.text == x :
tweet.genre.add(genreObj)
filtered.append(tweet)
else:
pass
for i in filtered: // write in db
i.save()
但是,它在tweet.genre.add(genreObj)
处显示错误
没有save(),我无法访问多对多字段
所以现在我的解决方案是这样的
tweets = fetchfromweb()
filtered = []
for tweet in tweets:
tweet.save() ## save and create manytomanyfield
if tweet.text == x :
tweet.genre.add(genreObj)
tweet.save()
else:
tweet.remove()
然而,它需要许多数据库插入和删除,这是一个良好的做法吗
或者有什么好主意吗?您不能在保存
tweet
之前添加M2M记录,因为tweet
需要在添加M2M相关记录之前设置主键。你可以查一下电话号码
不确定此gona是否有效,但您可以尝试交易:
with transaction.atomic():
for tweet in tweets:
tweet.save() ## save and create manytomanyfield
if tweet.text == x :
tweet.genre.add(genreObj)
else:
tweet.remove()
此外,在添加M2M记录后,您无需再次调用
save
。I取消存储。我必须先使用save()。非常感谢你