Django foreignkey get_or_create

时间:2011-02-10 21:59:12

标签: django foreign-keys

尝试检查并查看艺术家是否存在,如果没有添加或链接到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()

我做错了什么?

2 个答案:

答案 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))

这是参考。 https://code.djangoproject.com/ticket/13915