尝试检查并查看艺术家是否存在,如果没有添加或链接到foreignkey并保存。
以下是模型
class Artist(models.Model):
"""Artist model"""
title = models.CharField(max_length=250, unique=True)
slug = models.SlugField(unique=True)
class Track(models.Model):
"""Track model"""
artist = models.ForeignKey(Artist)
title = models.CharField(max_length=250)
slug = models.SlugField(unique=True)
这是检查
的脚本artist_id, created = Track.objects.get_or_create(artist_id=artist.title)
try:
artist_title = artist_id.artist_set.all()
except IndexError:
artist_slug = slugify(artist_title)
try:
artist = Artist.objects.create(title=artist_title, slug=artist_slug)
# artist.add(artist_id)
artist.save()
我做错了什么?
答案 0 :(得分:13)
对于此示例,在引用外键时访问get_or_create将不起作用。 这个例子使它工作:
a = Artist.objects.create(title='Sinch', slug='sinch')
t = Track.objects.create(artist=a, title='bitmap', slug='bitmap')
Track.objects.get_or_create(artist__id=1)
(<Track: Track object>, False) #is returned.
如果您尝试通过艺术家的ID收集曲目。要解决这个问题 - 请执行:
try:
a = Artist.objects.get(id=2)
except DoesNotExist:
artist_title = 'title'
artist_slug = slugify(artist_title)
artist = Artist.objects.create(title=artist_title, slug=artist_slug)
artist.save()
t, c = Track.objects.get_or_create(artist=a)
我知道这可能不是您想要的 - 但如果您告诉我您希望应用的工作流程,我可以发布更多适用的代码。
答案 1 :(得分:0)
执行以下操作。
artist_id, created = Track.objects.get_or_create(artist=Artist(title=artist.title))