Там какой-либо путь состоит в том, чтобы использовать GUID в django?

Самый простой способ это:

f = formula(model)
paste(f[2],f[3],sep='~')

готово!

14
задан Jason Baker 21 May 2009 в 19:14
поделиться

4 ответа

I'd create a basic GUID Model in order to reuse it's properties for any other models in my projects. Model inheritance is working nicely since several versions prior to Django 1.0 and is quite stable with Django 1.0.

Create something like project/common/models.py and place there this class:

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)

Then create your other models as usual:

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

And everything should work nicely with GUIDs as primary keys instead of autoincremental integers.

16
ответ дан 1 December 2019 в 10:19
поделиться

Если я сделаю python manage.py inspectdb вывод будет примерно таким:

class SomeModel(models.Model):
    uid = models.TextField(primary_key=True)

class SomeOtherModel(models.Model):
    uid = models.TextField()

Но это не работает. По какой-то причине это не сработает, если uid является первичным ключом. Поэтому я меняю его на это:

class SomeModel(models.Model):
    uid = models.TextField()

class SomeOtherModel(models.Model):
    somemodel = models.ForeignKey(SomeModel, db_column='uid', to_field='uid')

Кажется, это работает, но мучительно медленно.

0
ответ дан 1 December 2019 в 10:19
поделиться

Для тех, кому действительно нужно сгенерировать GUID:

guid = hashlib.sha1(str(random.random())).hexdigest()
-3
ответ дан 1 December 2019 в 10:19
поделиться

Взгляните на Django-extensions Поле UUID

8
ответ дан 1 December 2019 в 10:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: