اذهب إلى المحتوى
  • 0

كيفية استخدام UUID في جانفو Django؟

Mohssen A Mohssen

السؤال

أحاول الحصول على معرفات فريدة للكائنات في جانغو Django وأستخدم الحقل UUIDField. لست متأكدًا من طريقة عمل هذا الحقل لإنشاء معرفات فريدة لكل كائن في النموذج Model، ولكن حاولت إستخدام الكود التالي

# أستخدم الحزمة uuid هنا
import uuid
from django.db import models

class MyModel(models.Model):
  # قمت بعمل الحقل primary_key
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)

class User(models.Model):
    # ...
    unique_id = MyModel()

المشكلة الآن أنه في كل مرة أحصل على نفس المعرف بالضبط. فمثلا:

my_user = User.objects.get(...)
id = my_user.unique_id.id

ما هو الخطأ هنا، وكيف أصلح هذا الأمر؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

لِما لا تنشئ مُعرف فريد الى Model User مباشرة , دون إنشاء MyModel ومن ثم وضع بداخله حقل UUIDField ومن ثم إعطائه ل Model User  ! هذا ليس منطقي أنت هنا:

unique_id = MyModel()

في الحقيقة أنت تنشئ نسخة منه كل مرة تُخزن في unique_id فئة من نوع Class Model <NumberOfAddressInMemory> example الحل هو إنشاء UUID مباشرة في Model User  وحذف الفئة MyModel هكذا :

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

اذا كنت لا تُريد حذف الفئة MyModel وتريد علاقة بين الفئة User والفئة MyModel فيمكنك إنشاء علاقة ForeignKey بين الفئتين  هكذا سيرتبط كل User مع MyModel مع UUID مختلف بالشكل التالي :

class User(models.Model):
    unique_id = models.ForeignKey(MyModel, on_delete=models.CASCADE)

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

لقد واجهت المشكلة هذه من قبل حللتها عنطريق إضافة unique=True
وأيضا لا تحتاج لجعله primary_key أعتبره primary_key ثانوي:
وتعامل معه كأنه primary_key.

class Note(models.Model):

    note_id = models.UUIDField(default=uuid.uuid4, unique=True, editable=False)

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...