Czy istnieje sposób na użycie identyfikatorów GUID w django?


Mam kilka tabel połączonych przez identyfikatory GUID w programie SQL Server. Znalazłem teraz kilka niestandardowych pól, aby dodać obsługę GUID do django, ale staram się unikać używania kodu w postach na blogu, jeśli to w ogóle możliwe. Nie zamierzam robić nic z identyfikatorem GUID poza dołączeniem do niego i prawdopodobnie przypisaniem identyfikatora GUID dla nowych wpisów (chociaż jest to opcjonalne). Czy jest jakiś sposób, aby rozwiązać ten problem za pomocą wbudowanych typów django? Na przykład, czy mogę użyć jakiegoś pola typu char lub pola binarnego i "oszukać" django w połączeniu, używając go?
Jeśli to pomoże, używam django-pyodbc.
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Stworzyłbym podstawowy model Guid, aby ponownie wykorzystać swoje właściwości dla innych modeli w moich projektach. Model dziedzictwo dobrze działa z kilkoma wersjami do Django 1.0 i dość stabilnego z Django 1.0.
Utwórz coś takiego jak project/common/models.py i umieść tam tę klasę:
import hashlib
import random
from django.db import modelsclass 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)

Następnie utwórz swoje inne modele jak zwykle:
from common.models import GUIDModelclass 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()

I wszystko powinno działać dobrze z GUIDS jako klucze podstawowe zamiast liczb całkowitych auto-chipowych.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Spojrzeć na

Pole UUID rozszerzeń Django
https://github.com/django-exte ... 3L480
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Stare pytanie, ale dla tych, którzy używają Django 1.8+, wbudowany

UUIDField
https://docs.djangoproject.com ... field
Może być przydatny.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jeśli wykonam
python manage.py inspectdb
, wynik będzie mniej więcej taki:
class SomeModel(models.Model):
uid = models.TextField(primary_key=True)class SomeOtherModel(models.Model):
uid = models.TextField()

Nie działa jednak. Z jakiegoś powodu nie działa, jeśli UID jest kluczowym kluczem. Dlatego też to zmienam:
class SomeModel(models.Model):
uid = models.TextField()class SomeOtherModel(models.Model):
somemodel = models.ForeignKey(SomeModel, db_column='uid', to_field='uid')

Wydaje się, że działa, ale

zadręczany

powolny.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Dla tych, którzy naprawdę potrzebują generować identyfikatory GUID:
guid = hashlib.sha1(str(random.random())).hexdigest()

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się