2015-09-11 19 views
12

Django nesneleri için benzersiz kimlikler almaya çalışıyorum. Django 1.8'de UUIDField var. Modelimdeki her bir nesne için benzersiz kimlikler oluşturmak için bu alanı nasıl kullanacağımdan emin değilim. İşteDjango'da UUID nasıl kullanılır

Ben 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() 

Ben UUID modeli için id üreyebilir için var ama her şey burada aynı kimliği almak ne olduğunu. . :(Örneğin:

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

id sonra beni her zaman sorunun ne, ben bunu düzeltmek nasıl Yardımlarınız için teşekkür ederim aynı kimliğe

cevap

27

emin değilim verir niye seni.?! ... '' yaratılan bir UUID modeli ettik sen kişi modeline doğrudan Uuid alan ekleyebilir

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

Her kişi sonra benzersiz bir kimliğe sahip olmalıdır birincil anahtarı olmasını uuid istiyorsan tek yapardın:

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

Geçerli kodunuz kişiye bir alan eklemedi. MyUUIDModel() yaptığınızda bir MyUUIDModel örneği oluşturdu ve bunu bir sınıf özniteliği olarak kaydetti. Bunu yapmak mantıklı değil, MyUUIDModel model.py yükler her oluşturulur. MyUUIDModel'i gerçekten kullanmak isterseniz, ForeignKey'u kullanabilirsiniz. Sonra her kişi farklı bir MyUUIDModel örneğine bağlanır. Ancak, daha önce söylediğim gibi, en kolay yaklaşım UUID alanını doğrudan insana eklemektir.

3

doğrudan Person modelinde bir UUIDField olarak id alan ekleyebilirsiniz. Ayrı bir MyUUIDModel'a gerek yoktur.

Sana id bir UUIDField olduğunu UUIDField example kullanılan MyUUIDModel ile karıştırılmamalıdır düşünüyorum. Aşağıdaki kodu kullanabilirsiniz ve id için UUIDs kullanacaktır.

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): 
    ... 

Bu şekilde Kişi MyUUIDModel bir alt sınıfıdır olur ve onun kimliği alan tanımını devralır: Buna benzer Kişi modeli bildirirken

import uuid 
from django.db import models 

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

Bir alt sınıf olarak oluşturduğunuz sınıfını kullanmak gerekir.

+0

OP'nin amacını yakalamak gibi görünüyor, bence? – simon