2011-02-10 11 views
7

कोई कलाकार मौजूद है या नहीं, यह देखने की कोशिश कर रहा है कि कोई कलाकार मौजूद है या नहीं, अगर विदेशीकी को जोड़ या लिंक न करें।Django विदेशीकी 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

+1

आधार 10: – tim

+0

के साथ int() के लिए अमान्य शाब्दिक - लेकिन क्या आपके पास पूरा पता है। रेखा संख्या और ऐसे? मैंने अभी कोड चलाने की कोशिश की है और मुझे स्क्रिप्ट की पहली पंक्ति के लिए त्रुटि मिलती है जो जांचता है। '..._ या_create (artist_id = '...') क्या है? ट्रैक में 'artist_id' – Glycerine

उत्तर

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. 

आप कलाकार की आईडी के माध्यम से एक ट्रैक को इकट्ठा करने की कोशिश कर रहे हैं। चारों ओर यह काम करने के लिए - कार्य करें:

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) 

मैं जानता हूँ कि यह शायद अपने लिए क्या देख नहीं है - लेकिन अगर आप मुझे कार्यप्रवाह आप लागू कर कहता हूं, मैं और अधिक लागू कोड पोस्ट कर सकते हैं।

संबंधित मुद्दे