Django foreignkey get_or_create

tim*_*tim 7 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)
Run Code Online (Sandbox Code Playgroud)

这是检查的脚本

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()
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Gly*_*ine 14

对于此示例,在引用外键时访问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.
Run Code Online (Sandbox Code Playgroud)

如果您尝试通过艺术家的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)
Run Code Online (Sandbox Code Playgroud)

我知道这可能不是您想要的 - 但如果您告诉我您希望应用的工作流程,我可以发布更多适用的代码.