如何在创建模型实例时填充ManyToMany字段?

1 投票
1 回答
740 浏览
提问于 2025-04-30 20:38

我想创建一个模型实例,像这样:

new_tweet = Tweet.objects.create(text = tweet_object.text, date = tweet_object.date, username = tweet_object.username, retweet = tweet_object.retweet.all(), is_ret = True)

一切都进行得很顺利,直到这一步:retweet = tweet_object.retweet.all()。这时出现了一个错误:'retweet' is an invalid keyword argument for this function

这是一个多对多的字段。那么在创建新的模型实例时,应该如何填充这个字段呢?

顺便提一下,tweet_object.retweet.all()包含了许多retweet对象。

编辑:

模型:

class Tweet(models.Model):
    text = models.CharField(max_length=140)
    date = models.DateTimeField(auto_now_add=True)
    username = models.CharField(max_length=140)
    favourite = models.ManyToManyField(Favourite)
    retweet = models.ManyToManyField(Retweet)
    replies = models.ManyToManyField('Tweet')
    is_ret = models.BooleanField(default=False)

    def __unicode__(self):
        return self.username

而tweet_object只是另一个推文:

tweet_object = Tweet.objects.get(id=tweet_id)
暂无标签

1 个回答

1

我觉得你应该先创建一个Tweet对象,然后再和转发建立关系。

你可以在这里找到更多信息:https://docs.djangoproject.com/en/dev/topics/db/examples/many_to_many/

这非常简单:

tweet_object = Tweet.objects.get(id=tweet_id) 

new_tweet = Tweet.objects.create(text = tweet_object.text, date = tweet_object.date, username = tweet_object.username, is_ret = True)  

for retweet in tweet_object.retweet.all():
    new_tweet.retweet.add(retweet)

new_tweet.save()

撰写回答