Я бы создал базовую модель GUID, чтобы повторно использовать ее свойства для любых других моделей в моих проектах. Наследование моделей работает хорошо, так как несколько версий до Django 1.0 и довольно стабильно с Django 1.0.
Создайте что-то вроде project / common / models.py и поместите туда этот класс:
import hashlib
import random
from django.db import models
class GUIDModel(models.Model):
guid = models.CharField(primary_key=True, max_length=40)
def save(self, *args, **kwargs):
if not self.guid:
self.guid = hashlib.sha1(str(random.random())).hexdigest()
super(GUIDModel, self).save(*args, **kwargs)
Затем создайте другие модели как обычно:
from common.models import GUIDModel
class Customer(GUIDModel):
name = models.CharField(max_length=64)
class Product(GUIDModel):
name = models.CharField(max_length=64)
class Sale(GUIDModel):
customer = models.ForeignKey(Customer)
product = models.ForeignKey(Product)
items = models.PositiveIntegerField()
И все должно прекрасно работать с GUID в качестве первичных ключей, а не с автоинкрементными целыми числами.