2011-02-10 101 views
7

嘗試檢查並查看藝術家是否存在,如果不添加或鏈接到foreignkey並保存。Django foreignkey get_or_create

下面是模型

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

你會得到什麼錯誤? – Glycerine 2011-02-10 22:10:27

回答

12

對於本示例,在引用外鍵時訪問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的軌道。若要解決此 - DO:

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) 

我知道這可能不是你要找的 - 但是,如果你告訴我你想申請的工作流程,我可以發佈更多的應用代碼。