يمكن تخزين دجانغو أورم عدد صحيح 64 بت غير موقعة (ويعرف أيضا باسم أولونغ 64 أو يونت 64) بطريقة الخلفية الملحد موثوق?
-
12-12-2019 - |
سؤال
كل المستندات التي رأيتها تعني أنك قد تكون قادرة على القيام بذلك ، ولكن ليس هناك أي شيء رسمي ث/ص/ر أولونغ 64/يونت 64 الحقول.هناك عدد قليل من الخيارات الجاهزة التي تبدو واعدة جدا في هذه الساحة:
BigIntegerField
...تقريبا ، ولكن وقعت;PositiveIntegerField
...مثير للريبة 32 بت المظهر;وDecimalField
...مؤشر ثابت ممثلة مع الثعبانdecimal
نوع ، وفقا ل المستندات -- الذي يفترض أن يتحول إلى حقل قاعدة بيانات متحذلق وبطيئة مماثلة عندما مضروب بعيدا ، - لا أنواع بوستغريزل العشرية أو الرقمية.
...كل منها انظر مثل هم قد تخزين عدد من هذا القبيل.باستثناء أن أيا منهم لن يرتكب, يشبه إلى حد كبير كل شخصية روم كوم يصورها هيو جرانت.
معياري الأساسي هو أنه يعمل مع الخلفيات المدعومة من جانغو ، دون أي if postgresql (...) elif mysql (...)
نوع من هراء حالة خاصة.بعد ذلك ، هناك حاجة للسرعة-وهذا هو لحقل نموذج في تطبيق قاعدة بيانات مرئية من شأنها أن مؤشر البيانات المستمدة من الصورة (على سبيل المثال.التجزئات الإدراكية وميزات النقاط الرئيسية المستخرجة) ، مما يسمح بالترتيب والتجميع حسب محتوى تلك الصور.
لذا:هل هناك تمديد جانغو جيد أو التطبيق الذي يقدم نوعا من PositiveBigIntegerField
التي تناسب أغراض بلدي?
وباستثناء ذلك:إذا كان هناك طريقة بسيطة وموثوق بها لاستخدام الأسهم أورم جانغو لتخزين إنتس 64 بت غير الموقعة ، أود أن أعرف ذلك.انظروا ، أنا لا أزيز ثنائي;لا بد لي من القيام تكملة اثنين على الورق-حتى إذا كان هذا الأسلوب من يدكم ينطوي على بعض الخداع قليلا التحول ، لا تتردد في شرح ما هو عليه ، حتى لو كان يضرب لك كما هو واضح.شكرا مقدما.
المحلول
على الرغم من أنني لم اختبار ذلك ، ولكن قد ترغب في فئة فرعية فقط BigIntegerField
.الأصل BigIntegerField
يبدو أن (المصدر هنا):
class BigIntegerField(IntegerField):
empty_strings_allowed = False
description = _("Big (8 byte) integer")
MAX_BIGINT = 9223372036854775807
def get_internal_type(self):
return "BigIntegerField"
def formfield(self, **kwargs):
defaults = {'min_value': -BigIntegerField.MAX_BIGINT - 1,
'max_value': BigIntegerField.MAX_BIGINT}
defaults.update(kwargs)
return super(BigIntegerField, self).formfield(**defaults)
مشتقة PositiveBigIntegerField
قد يبدو مثل هذا:
class PositiveBigIntegerField(BigIntegerField):
empty_strings_allowed = False
description = _("Big (8 byte) positive integer")
def db_type(self, connection):
"""
Returns MySQL-specific column data type. Make additional checks
to support other backends.
"""
return 'bigint UNSIGNED'
def formfield(self, **kwargs):
defaults = {'min_value': 0,
'max_value': BigIntegerField.MAX_BIGINT * 2 - 1}
defaults.update(kwargs)
return super(PositiveBigIntegerField, self).formfield(**defaults)
على الرغم من أنه يجب عليك اختباره جيدا ، قبل استخدامه.إذا قمت بذلك ، يرجى مشاركة النتائج :)
تحرير:
فاتني شيء واحد-تمثيل قاعدة البيانات الداخلية.يعتمد هذا على القيمة التي تم إرجاعها بواسطة get_internal_type()
ويتم تخزين تعريف نوع العمود على سبيل المثال. هنا في حالة الخلية الخلفية وتحديد هنا.يبدو وكأنه الكتابة db_type()
سوف تعطيك السيطرة على كيفية تمثيل الحقل في قاعدة البيانات.ومع ذلك ، سوف تحتاج إلى إيجاد طريقة لإرجاع القيمة الخاصة بنظام إدارة قواعد البيانات في db_type()
عن طريق التحقق connection
حجة.