【问题标题】:When creating a model instance how to fill ManyToMany field?创建模型实例时如何填充 ManyToMany 字段?
【发布时间】:2014-10-31 10:21: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() 由许多 retweetobjects 组成。

编辑:

型号:

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)

【问题讨论】:

  • 什么是 tweet_object?你能发布推文模型吗?
  • 添加了 tweet_object 和模型

标签: python django django-orm


【解决方案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()

【讨论】:

  • 我认为您的for 循环不会以这种方式工作。你不能遍历tweet_object.retweet。在我看来应该是:tweet_object.retweet.all().
  • 也许for 循环甚至可以被放弃:new_tweet.retweet.add(tweet_object.retweet.all())
  • 代码示例中有错字。在for 循环中有tweet_objects.retweet.all(),但它应该是tweet_object.retweet.all()。它会抛出一个错误,因为tweet_objects 没有定义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-31
  • 1970-01-01
  • 2014-03-20
相关资源
最近更新 更多