Amer Abdallah نشر 10 سبتمبر 2021 أرسل تقرير نشر 10 سبتمبر 2021 (معدل) أحاول استخدام get_or_create لبعض الحقول في النماذجة models الخاصة بي، لكنني أتلقى خطأ 500 عندما أحاول القيام بذلك. Cannot assign "(<Post: News>, False)": "User.post" must be a "Post" instance. يبدو السطر التالي هو السبب في ظهور الخطأ: User.post = Post.objects.get_or_create(category="News") تم التعديل في 10 سبتمبر 2021 بواسطة Amer Abdallah 2 اقتباس
1 سامح أشرف نشر 10 سبتمبر 2021 أرسل تقرير نشر 10 سبتمبر 2021 يقوم التابع get_or_create بإرجاع tuple وليس كائن من نوع Post، وبالتالي يجب أن يكون لديك متغيرين قبل علامة الإسناد (علامة = )، يحتوي العنصر الأول في الـ tuple التي تم إرجاعها من هذا التابع على الكائن (في حالة تم الحصول عليه من قاعدة البيانات، أي من خلال عمل get)، أما العنصر الثاني في الـ tuple فهو قيمة منطقية True/False (تكون True في حالة تم إنشاء الكائن، وتكون False في حالة تم إرجاعه ولم يتم إنشاء كائن جديد في قاعدة البيانات). User.post,created = Post.objects.get_or_create(category="News") هنا مثال من توثيق Django: # get_or_create() a person with similar first names. p, created = Person.objects.get_or_create( first_name='John', last_name='Lennon', defaults={'birthday': date(1940, 10, 9)}, ) # get_or_create()لم يقم التابع بإنشاء كائن في هذه الحالة >>> created False 1 اقتباس
0 Ahmed Sharshar نشر 11 سبتمبر 2021 أرسل تقرير نشر 11 سبتمبر 2021 الاستخدام الصحيح للدالة هو كالتالي: customer.source,created = Source.objects.get_or_create(name="News") وهو يقوم بإرجاع tuple بحيث يكون العنصر الاول هو الكائن الذي تم ارجاعه بينما العنصر الثاني هي قيمة منطقية، اما صواب واما خطأ بحيث تشير الى اذا ما كان تم انشاء الكائن ام لا. المثال التالي يوضح كيفية استخدامها: p, created = country.objects.get_or_create( city='Cairo country='Egypt ) >>> created False لاحظ أنه لم يتم إنشاء التابع لانه لم يتم ذكره بداخل defaults. 1 اقتباس
السؤال
Amer Abdallah
أحاول استخدام get_or_create لبعض الحقول في النماذجة models الخاصة بي، لكنني أتلقى خطأ 500 عندما أحاول القيام بذلك.
يبدو السطر التالي هو السبب في ظهور الخطأ:
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.