Django

2015-09-11 13 views
12

में यूयूआईडी का उपयोग कैसे करें मैं अपने Django वस्तुओं के लिए अद्वितीय आईडी प्राप्त करने की कोशिश कर रहा हूं। Django 1.8 में उनके पास UUIDField है। मुझे यकीन है कि मेरे मॉडल में प्रत्येक ऑब्जेक्ट के लिए अद्वितीय आईडी उत्पन्न करने के लिए इस क्षेत्र का उपयोग कैसे करें।Django

यहाँ है कि मैं क्या UUIDField

import uuid 
from django.db import models 

class MyUUIDModel(models.Model): 
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) 

class Person(models.Model): 
    ... 
    unique_id = MyUUIDModel() 

मैं UUID मॉडल के लिए आईडी पुन: पेश कर सकते हैं के लिए है, लेकिन हर बार मुझे लगता है मैं ठीक उसी आईडी प्राप्त करते हैं। । :(उदाहरण के लिए:

person = Person.objects.get(some_field = some_thing) 
id = person.unique_id.id 

आईडी तो मुझे एक ही आईडी हर बार क्या गलत है, मैं इसे इस तरह ठीक है कि आप आपकी मदद के लिए धन्यवाद

उत्तर

27

मैं सुनिश्चित नहीं हूं देता है तुम क्यों।?! ।।। 've बनाई गई एक UUID मॉडल आप व्यक्ति मॉडल के लिए सीधे UUID क्षेत्र में जोड़ सकते हैं

class Person(models.Model): 
    unique_id = models.UUIDField(default=uuid.uuid4, editable=False, unique=True) 

प्रत्येक व्यक्ति तो एक विशिष्ट आईडी होनी चाहिए आप UUID प्राथमिक कुंजी होना चाहते थे, तो आप करना होगा:

class Person(models.Model): 
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) 

आपके वर्तमान कोड ने व्यक्ति को फ़ील्ड नहीं जोड़ा है। जब आपने MyUUIDModel() किया है, तो इसे MyUUIDModel उदाहरण बनाया है, और इसे क्लास एट्रिब्यूट के रूप में सहेजा है। ऐसा करने में कोई मतलब नहीं है, MyUUIDModel प्रत्येक बार models.py लोड होने पर बनाया जाएगा। यदि आप वास्तव में MyUUIDModel का उपयोग करना चाहते हैं, तो आप ForeignKey का उपयोग कर सकते हैं। फिर प्रत्येक व्यक्ति एक अलग MyUUIDModel उदाहरण से लिंक होगा।

class Person(models.Model): 
    ... 
    unique_id = models.ForeignKey(MyUUIDModel, unique=True) 

हालांकि, जैसा कि मैंने पहले कहा था, सबसे आसान तरीका यूयूआईडी फ़ील्ड को सीधे व्यक्ति को जोड़ना है।

3

आप सीधे Person मॉडल में एक UUIDField रूप id क्षेत्र जोड़ सकते हैं। अलग MyUUIDModel की कोई आवश्यकता नहीं है।

मैं तुम्हें इसके MyUUIDModelUUIDField example जहां id एक UUIDField है में प्रयोग किया जाता के साथ भ्रमित है लगता है। आप बस नीचे दिए गए कोड का उपयोग कर सकते हैं और id के लिए UUIDs का उपयोग करेगा।

import uuid 
from django.db import models 

class MyUUIDModel(models.Model): 
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) 

class Person(MyUUIDModel): 
    ... 

इस तरह व्यक्ति MyUUIDModel का एक उपवर्ग हो जाता है और उसके आईडी फ़ील्ड परिभाषा प्राप्त कर लेंगे:

import uuid 
from django.db import models 

class Person(models.Model): 
    ... 
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) 
2

आप जब इस तरह अपने व्यक्ति मॉडल की घोषणा एक उपवर्ग के रूप में वर्ग आपके द्वारा बनाए उपयोग करने के लिए की जरूरत है।

+0

ऐसा लगता है कि ओपी के इरादे पर कब्जा है, मुझे लगता है? – simon