How to force django admin to choose at least one "oneToMany" object?

السلام عليكم اصدقائي
عدت بسؤال جديد لم اجد له جوابا واضحا بعد عناء البحث
لأضعكم اولا فالاطار :
انا بدأت العمل على مشروع لشركة ناشئة تقدم الخدمات التالية :

  • Formation (training)
  • Development
  • Marketing

عملاء هذه الشركة نوعان :

  • person
  • entreprise (company)

المطلوب مني عمل نظام CRUD
(CREATE READ UPDATE DELETE )
لكن دون واجهات امامية فقط من ال admin panel
ما قمت به هو اضافة كل كل ماسبق على انه model لوحده
ثم اضفت هذه الاسطر الثلاثة لكل من ال person و الentreprise

formation = models.ForeignKey('Formation', on_delete=models.CASCADE, blank=True, default=None, null=True)
marketing = models.ForeignKey('Marketing', on_delete=models.CASCADE, blank=True, default=None, null=True)
development = models.ForeignKey('Development',on_delete=models.CASCADE, blank=True, default=None, null=True)

لأن لدينا علاقة onetoMany حسب علمي

المشكلة التي وقعت فيها
image

أريد ان افرض اضافة احد هؤلاء الثلاثة عند اضافة person او enterprise وامنع تركها فارغة جميعا
ساعدوني :sweat_smile::rofl:

2 Likes

اهلا سيف

بالنسبة للعلاقة OneToMany، الأمر يعتمد:

  1. هل كل شركة لديها formation واحد فقط؟
  2. نفس الأمر مع Development و Marketing؟

مالذي تقصده؟

في الوضع أنت اضفت blank=True, default=None, null=True

والذي تسمح بجعل الحقل فارغ

هل أنت تريد جعلها blank = False ؟

3 Likes

نعم مبدئيا
وكل شركة او شخص يمكنه التمتع باحد هذه الخدمات الثلاثة او بخدمتين او ثلاثتهم جميعا

أقصد ان كل person او entreprise يجب ان يكون لديه على الاقل احدى الثلاثة
formation Development او Marketing

اذا اظفتها للجميع يصبح ثلاثتهم formation Development او Marketing
حقولا اجبارية و لا يمكن تسجيل person او entreprise بواحدة او اثنتين فقط

image

وفي حالتي انا حيث `blank = True

كل الحالات ممكنة حتى في حالة عدم توفر اي واحدة من الثلاثة`
وهذه حالة ممنوعة لكن لم اجد كيف امنعها :sweat_smile:

ما تقصدة على حد فهمي انك تريد من العميل (سواء العميل شركات او أفراد )ان يختار احد الخدمات المقدمة من الشركة او خدمتين او الجميع وأن لا يكون مجبر على اختيارهم جميعا في نفس الوقت
اعتقد ان عليك عمل مودل للشركات وموديل اخر للافراد
ومودل اخر للخدمات التي تقدمها الشركة
وبين الخدمات التي تقدمها الشركه والعميل( سواء شركه او فرد) علاقة oneToMany
هذا كما قلت على حد فهمي والله اعلم

1 Like

اهلا أسماء شكرا على مرورك

في الواقع لا اريد للعميل ان يكون مجبر على اي شيئ
فقط لا اريده ان يسجل و الحقول الثلاثة ( اي الخدمات) فارغة جميعها … عليه ان يتمتع بخدمة واحدة على الأقل

هذا ما قمت به تماما
يبقى فقط ال logic الذي يقوم بالتحقق من أن العميل لم يترك الحقول الثلاثة فارغة جميعا و هذا ما لم اجده :sweat_smile:

2 Likes

انا افكر معك في حل فقط
يمكن ان تقوم باستخدام choices من خلالها لابد ان يختار خدمة
في هذه الحالة سيختار العميل خدمة واحدة فقط
وربما تبحث في dj doc اعتقد ان لو كان مثل checkboxes يمكن عمله سيكون افضل

2 Likes

أو بإمكانك عمل override للدالة create داخل الكلاس، بهذا الشكل:

بحيث تتحقق من وجود حقل واحد على الأقل

2 Likes

اعتقد ان هذا ما تبحث عنه

4 Likes

@YaserAlnajjar @asmaa_salih شكراااا :heart_eyes::heart_eyes:

اضافة الدالة clean كما اقترحت أسماء حل المشكلة اخيرا

2 Likes

عفوا شكرا لك على سؤالك لانه اضاف الي معلومة جديدة

2 Likes