سؤال

قبل اليوم ، كنت أستخدم Django 1.1. للتأكد من أنني مواكبة الأوقات ، قررت تحديث بيئة Django الخاصة بي لاستخدام Django 1.2.3. لسوء الحظ ، لقد واجهت مشكلة.

الرمز التالي لم يرفع قيمة في 1.1:

        instance = FormClass(
            request.POST,
            instance=existing_instance
        ).save(commit=False)

ومع ذلك ، الآن بعد أن قمت بالترقية ، فإنه يرفع قيمة في كل مرة. لدي حقل SSN أقدمه كجزء من النموذج الخاص بي وأقوم بتجريد الشرطات قبل إجراء مكالمة مثيل. لسوء الحظ ، يحدث ValueRror لأن Django يعتقد أن قيمتي SSN طويلة جدًا (تتوقع 9 أحرف وتتلقى 11-123-45-6789).

لقد نظرت من خلال مستندات Django ولم أتمكن من العثور على أي شيء يتعلق بهذا التغيير. اي فكره تعتمد عليها؟ لطالما اعتقدت أن الغرض من المعلمة "الالتزام = false" كان للسماح للمعالجة المسبقة للبيانات قبل حفظ المعلومات.

هل فاتني شيء؟

هل كانت مفيدة؟

المحلول

بحسب ال 1.2 مستندات على save() طريقة, ، "إذا اتصلت بحفظ () مع الالتزام = خطأ ، فسيقوم بإرجاع كائن لم يتم حفظه بعد إلى قاعدة البيانات." لذلك لست متأكدًا من سبب وجود تغيير في الوظيفة ، ولكن من الممكن أن يتم تشغيل رمز التحقق/التحقق في 1.1 فقط عند حفظ كائن إلى قاعدة البيانات ، وفي 1.2 يحدث في وقت سابق (قبل حفظ الكائن) .

في أي حال ، إذا كنت تقوم بتنظيف البيانات التي يتم إدخالها في نموذج ، فربما يجب أن تقوم بتنظيفها في Formclass:

def clean_ssn(self):
    data = re.sub(r'[^0-9]','',self.cleaned_data['ssn'])
    #validation code here
    return data

يجب على الأقل إصلاح المشكلة ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top