django可以保存很多

时间:2016-03-07 19:38:46

标签: python django

我正在创建一个新闻应用程序,其中文章和作者之间存在多对多的关系。我目前看到的模型如下:

$ gulp

我的数据结构如下:

class Author(models.Model):
    name = models.CharField(max_length=100, null=True)

class Article(models.Model):
    authors = models.ManyToManyField(Author)
    article_title = models.CharField(max_length=250, unique_for_date="pub_date", null=True)
    pub_date = models.DateTimeField(null=True)

我正在尝试插入保留文章和作者之间关系的数据,但无法弄清楚如何一次性插入多个作者。我目前的代码看起来像这样,但会引发{'contributors': [{'author': 'Author One'}, {'author': 'Author Two'}], 'publication_date': '2016-01-20T19:58:20Z', 'title': 'Article title'} 错误:

AttributeError: 'tuple' object has no attribute 'authors'

任何建议,帮助,指导非常感谢。如果有任何需要澄清,请告诉我。哦,我正在使用python3.5和Django1.9。干杯

更新

我希望通过改变代码来实现这一目标:

contributor = data['contributors']
publication_date = data['publication_date']
title = data['title']
a = Article.objects.get_or_create(
    article_title=title,
    pub_date=publication_date,
)
for c in contributor:
    author = c['author']
    au = Author.objects.get_or_create(name=author)
    a.authors.add(au)

但是,我想在a = Article.objects.get_or_create( article_title=title, pub_date=publication_date, ) for c in contributor: article = Article.objects.get(article_title=title) author = Author.objects.create(name=c['author']) article.authors.add(author) 上使用get_or_create,但这会导致错误:author。有什么想法吗?

最终更新

通过改变解决:

TypeError: int() argument must be a string, a bytes-like object or a number, not 'Author'

为:

author = Author.objects.create(name=c['author'])

根据@mipadi的建议

1 个答案:

答案 0 :(得分:4)

get_or_create返回一个2元组(对象,已创建),第二个元素是一个布尔值,表示对象是否已创建。所以a是一个元组。你应该这样做:

a, created = Article.objects.get_or_create(...)