Amer Abdallah نشر 3 سبتمبر 2021 أرسل تقرير نشر 3 سبتمبر 2021 في قاعدة البيانات، أريد إضافة كائن آخر وهو نسخة من الكائن الذي لدي بالفعل. لنفترض أن لدي جدول به صف واحد. أرغب في إدراج نسخة من هذا الكائن في صف آخر باستخدام مفتاح أساسي Primary Key مختلف. كيف أقوم بذلك؟ 1 اقتباس
1 سامح أشرف نشر 3 سبتمبر 2021 أرسل تقرير نشر 3 سبتمبر 2021 يمكنك أن تقوم بذلك بأكثر من طريقة وأسهلهم هي من خلال عمل نسخة من الكائن وجعل الـ Primary Key يساوي None، كالتالي: obj = User.objects.get(pk=1) obj.pk = None obj.save() الكود السابق يقوم بجلب instance من الكائن ثم نقوم بجعل الـ id بقيمة None، وبالتالي عند تشغيل التابع save سوف يقوم بعمل صف جديد في قاعدة البيانات. بالطبع يمكنك أن تقوم بتحديث/تعديل الكائم قبل حفظه بشكل طبيعي، كما ينصح توثيق Django أن تقوم بجعل الخاصية _state.adding تساوي True، لكي تتم عملية إنشاء كائن جديد بشكل سليم كالتالي: post = Post(title='My first blogpost', summary='Blogging is easy') post.save() # post.pk == 1 post.pk = None post._state.adding = True post.save() # post.pk == 2 عملية الحفظ الأولى سوف تقوم بإنشاء أول صف في الجدول في قاعدة البيانات، بينما عملية الحفظ الثانية سوف تقوم بعمل صف جديد في نفس الجدول. 1 اقتباس
0 Ali Haidar Ahmad نشر 4 سبتمبر 2021 أرسل تقرير نشر 4 سبتمبر 2021 إضافة لما قدمه سامح يمكنك القيام بما يلي: from copy import deepcopy as c new_obj = c(object_you_want_copied) new_obj.id = None new_obj.save() هذه الطريقة لا تقوم باستدعاء قاعدة البيانات لاسترداد كائن. وهذا يجعلها مفيدة إذا كنت تريد إنشاء نسخة من كائن غير موجود حتى الآن في قاعدة البيانات. وهنا طريقة أخرى أيضاً لاستنساخ كائن: from django.forms import model_to_dict obj = Some.objects.get(slug='something') par = model_to_dict(instance, exclude=['id']) new_obj = Some.objects.create(**par) أو يمكنك استنساخه كالتالي: d = Foo.objects.filter(pk=1).values().first() d.update({'id': None}) duplicate = Foo.objects.create(**d) 1 اقتباس
السؤال
Amer Abdallah
في قاعدة البيانات، أريد إضافة كائن آخر وهو نسخة من الكائن الذي لدي بالفعل. لنفترض أن لدي جدول به صف واحد. أرغب في إدراج نسخة من هذا الكائن في صف آخر باستخدام مفتاح أساسي Primary Key مختلف. كيف أقوم بذلك؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.