我正在创建一个新闻应用程序,其中文章和作者之间存在多对多关系。我目前拥有的模型如下所示:
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'
错误:
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)
任何建议、帮助、指导都将不胜感激。如果有什么需要澄清的,请告诉我。哦,我用的是python3.5和Django1.9。干杯
更新
我把代码改成了:
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)
但是,我想在author
上使用get_or_create
,但这会导致错误:TypeError: int() argument must be a string, a bytes-like object or a number, not 'Author'
。有什么想法吗?你知道吗
最终更新
通过更改解决:
author = Author.objects.create(name=c['author'])
收件人:
author, created = Author.objects.get_or_create(name=c['author'])
按照@mipadi的建议
get_or_create
返回一个2元组(object,created),第二个元素是一个布尔值,指示是否创建了对象。所以a
是一个元组。你应该这样做:相关问题 更多 >
编程相关推荐