Abdulazeez Altameemi نشر 2 يوليو 2022 أرسل تقرير نشر 2 يوليو 2022 لدي عدة ادخالات وكل ادخال له form خاص به لما اقوم بأدخال قيمة في ادخال معين يقوم بحذف قيم الادخالات السابقة ويرجع قيمتهم None ممكن طريق احافظ على القيم السابقة لكل ادخال اقتباس
0 محمد حجي2 نشر 2 يوليو 2022 أرسل تقرير نشر 2 يوليو 2022 سأقوم بشرح تسلسل طريقة عمل فورم إدخال و حفظ البيانات بطريقة الصحيحة. لكن أربد منك أن ترفق الكود الخاص بك لمعرفة المشكلة. قد يساعدك لمعرفة المشكلة الخاصة بك سوف أقوم بشرح على مثال أنه لديك منشورات تريد حفظها: في ملف models.py قمنا بإنشاء جدول البيانات. class Post(models.Model): headline = models.CharField(max_length=200) sub_headline = models.CharField(max_length=200, null=True, blank=True) thumbnail = models.ImageField(null=True, blank=True, upload_to="images", default="/images/placeholder.png") body = RichTextUploadingField(null=True, blank=True) created = models.DateTimeField(auto_now_add=True) active = models.BooleanField(default=False) featured = models.BooleanField(default=False) tags = models.ManyToManyField(Tag, null=True, blank=True) slug = models.SlugField(null=True, blank=True) def __str__(self): return self.headline و الأن الى ملف forms.py حتى نقوم بعمل فورم استقبال البيانات Post: حيث هنا حددنا أن كل العناصر التي في model , Post سيتم إدخالها عنطريق المستخدم: class PostForm(ModelForm): class Meta: model = Post fields = '__all__' و بعدها في ملف views.py: هنا سوف نستقبل request القادم من فورم عند إرسال البيانات وفحص هل هو من نوع POST و نستقبل كل من ملفات المرفقة و النصوص . سيكون شرح دخل الكود. @login_required(login_url="home") def createPost(request): form = PostForm() if request.method == 'POST': form = PostForm(request.POST, request.FILES) # استقبال كل من ملفات و البينات المرسلة if form.is_valid(): # فحص وجود ببيانات form.save() #حفظ البيانات في قاعدة البيانات return redirect('posts') # الرجوع لصفحة محددة context = {'form': form} return render(request, 'base/post_form.html', context) و الأن مع شكل الفورم في ملف post_form.html: وهكذا يكون إنتهيت من كل النقاط الازمة لعمل فوم و حفظ بيانات الخاصة به: <div class="main-container"> <a class="btn btn-sm btn-primary" href="{% url 'posts' %}">« Back to Posts</a> <form action="" method="POST" enctype="multipart/form-data"> {% csrf_token %} {{form.media}} {{form|crispy}} <input class="btn btn-primary" type="submit" value="Submit Post"> </form> </div> اقتباس
0 عزوز عزوز2 نشر 2 يوليو 2022 أرسل تقرير نشر 2 يوليو 2022 (معدل) . تم التعديل في 2 يوليو 2022 بواسطة عزوز عزوز2 . اقتباس
0 Abdulazeez Altameemi نشر 2 يوليو 2022 الكاتب أرسل تقرير نشر 2 يوليو 2022 بتاريخ 1 ساعة قال محمد حجي2: سأقوم بشرح تسلسل طريقة عمل فورم إدخال و حفظ البيانات بطريقة الصحيحة. لكن أربد منك أن ترفق الكود الخاص بك لمعرفة المشكلة. قد يساعدك لمعرفة المشكلة الخاصة بك سوف أقوم بشرح على مثال أنه لديك منشورات تريد حفظها: في ملف models.py قمنا بإنشاء جدول البيانات. class Post(models.Model): headline = models.CharField(max_length=200) sub_headline = models.CharField(max_length=200, null=True, blank=True) thumbnail = models.ImageField(null=True, blank=True, upload_to="images", default="/images/placeholder.png") body = RichTextUploadingField(null=True, blank=True) created = models.DateTimeField(auto_now_add=True) active = models.BooleanField(default=False) featured = models.BooleanField(default=False) tags = models.ManyToManyField(Tag, null=True, blank=True) slug = models.SlugField(null=True, blank=True) def __str__(self): return self.headline و الأن الى ملف forms.py حتى نقوم بعمل فورم استقبال البيانات Post: حيث هنا حددنا أن كل العناصر التي في model , Post سيتم إدخالها عنطريق المستخدم: class PostForm(ModelForm): class Meta: model = Post fields = '__all__' و بعدها في ملف views.py: هنا سوف نستقبل request القادم من فورم عند إرسال البيانات وفحص هل هو من نوع POST و نستقبل كل من ملفات المرفقة و النصوص . سيكون شرح دخل الكود. @login_required(login_url="home") def createPost(request): form = PostForm() if request.method == 'POST': form = PostForm(request.POST, request.FILES) # استقبال كل من ملفات و البينات المرسلة if form.is_valid(): # فحص وجود ببيانات form.save() #حفظ البيانات في قاعدة البيانات return redirect('posts') # الرجوع لصفحة محددة context = {'form': form} return render(request, 'base/post_form.html', context) و الأن مع شكل الفورم في ملف post_form.html: وهكذا يكون إنتهيت من كل النقاط الازمة لعمل فوم و حفظ بيانات الخاصة به: <div class="main-container"> <a class="btn btn-sm btn-primary" href="{% url 'posts' %}">« Back to Posts</a> <form action="" method="POST" enctype="multipart/form-data"> {% csrf_token %} {{form.media}} {{form|crispy}} <input class="btn btn-primary" type="submit" value="Submit Post"> </form> </div> اخي الكريم هذا الشيفرة التي استخدمها انا استقبل ارقام من المستخدم و اقوم بحل معادلة وعرض حل المعادلة للمستخدم def math(request): asphalt_singles = request.GET.get('asphalt_singles') membrane = request.GET.get('Membrane') sheathing = request.GET.get('Sheathing') roof_trusses = request.GET.get('Roof Trusses') poly_vapour_barrier = request.GET.get('Poly Vapour Barrier') # حل المعادلات asphalt_singles1 = float(asphalt_singles) * 20.9 membrane1 = float(membrane) * 20.9 sheathing1 = 40 * (0.625 / 12) roof_trusses1 = float(roof_trusses) * 20.9 poly_vapour_barrier1 = poly_vapour_barrier * 20.9 + (membrane1 / asphalt_singles1) context = { 'asphalt_singles': asphalt_singles1, 'membrane': membrane1, 'sheathing': sheathing1, 'roof_trusses': roof_trusses1, 'poly_vapour_barrier': poly_vapour_barrier1, } return render(request, 'html_pages/math.html', context) المدخلات لدي على شكل جدول في كل input استخدمت form حتى استطيع ارسال input واحد فقط <tbody> <tr> <td></td> <td>Asphalt Singles</td> <td> <form method="get"><input style="width: 45px;" type="numeric" name="asphalt_singles" value="{{ asphalt_singles_input_value }}"></form> </td> <td>kPa</td> <td style="color: rgb(247, 10, 10)">{{asphalt_singles1}}</td> <td>PSF</td> </tr> <tr> <td></td> <td>Membrane</td> <td> <form method="get"><input style="width: 45px;" type="numeric" name="Membrane" value="{{membrane_input_value}}"></form> </td> <td>kPa</td> <td style="color: rgb(247, 10, 10)">{{membrane}}</td> <td>PSF</td> </tr> <tr> <td></td> <td>5/8" Sheathing</td> <td style="color: rgb(42, 178, 246);"> <form method="get"><input style="width: 45px;" type="numeric" name="Sheathing" value="{{sheathing_input_value}}"></form> </td> <td>kPa</td> <td style="color: rgb(247, 10, 10)">{{sheathing}}</td> <td>PSF</td> </tr> <tr> <td></td> <td>Roof Trusses</td> <td style="color: rgb(42, 178, 246);"> <form method="get"><input style="width: 45px;" type="numeric" name="Roof Trusses" value="{{roof_trusses_input_value}}"></form> </td> <td>kPa</td> <td style="color: rgb(247, 10, 10)">{{roof_trusses}}</td> <td>PSF</td> </tr> <tr> <td></td> <td>6mil Poly Vapour Barrier</td> <td style="color: rgb(42, 178, 246);"> <form method="get"><input style="width: 45px;" type="numeric" name="Poly Vapour Barrier" value="{{poly_vapour_barrier_input_value}}"></form> </td> <td>kPa</td> <td style="color: rgb(247, 10, 10)">{{poly_vapour_barrier}}</td> <td>PSF</td> </tr> </tbody> المشكلة لما اقوم بأدخال قيمة في input يقوم بحذف القيم السابقة من inputs ويرجع None وبذلك يحدث خطأ من نوع TypeError في حل المعادلات اقتباس
0 محمد حجي2 نشر 2 يوليو 2022 أرسل تقرير نشر 2 يوليو 2022 (معدل) لقد قمت بعدد من التعديلات على الكود الخاص بك حتى بعمل بشكل المطلوب حسب ما مفهمت منك: أولاً قمت بتحويل كل إدخالات في form واحد و من ثم تغير نوعه من get ل POST ومن ثم إضافة زر إرسال لكل الحقول: و أصبح بهذا الشكل: <div> <tr> <td>Asphalt Singles</td> <form method="POST"> {% csrf_token %} {{form.media}} {{form|crispy}} <input style="width: 45px;" type="numeric" name="asphalt_singles" value="{{ asphalt_singles_input_value }}"> <td>kPa</td> <td style="color: rgb(247, 10, 10)">{{asphalt_singles1}}</td> <td>PSF</td> < <td></td> <td>Membrane</td> <td> <input style="width: 45px;" type="numeric" name="Membrane" value="{{membrane_input_value}}"> </td> <td>kPa</td> <td style="color: rgb(247, 10, 10)">{{membrane}}</td> <td>PSF</td> <td></td> <td>5/8" Sheathing</td> <td style="color: rgb(42, 178, 246);"> <input style="width: 45px;" type="numeric" name="Sheathing" value="{{sheathing_input_value}}"> </td> <td>kPa</td> <td style="color: rgb(247, 10, 10)">{{sheathing}}</td> <td>PSF</td> <td></td> <td>Roof Trusses</td> <td style="color: rgb(42, 178, 246);"> <input style="width: 45px;" type="numeric" name="Roof Trusses" value="{{roof_trusses_input_value}}"> </td> <td>kPa</td> <td style="color: rgb(247, 10, 10)">{{roof_trusses}}</td> <td>PSF</td> <td></td> <td>6mil Poly Vapour Barrier</td> <td style="color: rgb(42, 178, 246);"> <input style="width: 45px;" type="numeric" name="Poly Vapour Barrier" value="{{poly_vapour_barrier_input_value}}"> <input class="btn btn-primary" type="submit" value="Submit Post"> </form> </td> <td>kPa</td> <td style="color: rgb(247, 10, 10)">{{poly_vapour_barrier}}</td> <td>PSF</td> </tr> </div> بنسبة لملف views.py: قمت بتغير طريقة استقبال البيانات حتى لا تصل لي فارغة: و أصبحت كتالي: def math(request): asphalt_singles = request.POST.get('asphalt_singles') print(asphalt_singles) membrane = request.POST.get('Membrane') # هنا تم تغير طريقة استقبال البيانات sheathing = request.POST.get('Sheathing') roof_trusses = request.POST.get('Roof Trusses') poly_vapour_barrier = request.POST.get('Poly Vapour Barrier') asphalt_singles1 = float(asphalt_singles) * 20.9 membrane1 = float(membrane) * 20.9 sheathing1 = 40 * (0.625 / 12) roof_trusses1 = float(roof_trusses) * 20.9 poly_vapour_barrier1 = float(poly_vapour_barrier) * 20.9 + ( float(membrane1) / float(asphalt_singles1)) # وبعض التعديلات هنا context = { 'asphalt_singles': asphalt_singles1, 'membrane': membrane1, 'sheathing': sheathing1, 'roof_trusses': roof_trusses1, 'poly_vapour_barrier': poly_vapour_barrier1, } print(context) return render(request, 'html_pages/math.html', context) قمت بتجربة الكود وتم طباعة context و كانت كل البيانات ظاهرة بدون مشاكل. لا تقم بستخدام get لإرسال البيانات بل POST لأن get تستخدم لستقبال البيانات. تم التعديل في 2 يوليو 2022 بواسطة محمد حجي2 اقتباس
0 محمد حجي2 نشر 2 يوليو 2022 أرسل تقرير نشر 2 يوليو 2022 في حال كنت تريد إرسال عنصر واحد فقط او عدد معين من حقول قم بفحص إذا تم إرسال بيانات في كل حقل و قم بإستثنائه عند عمل عمليات حسابية على حقل بجمل شرطية على كل عملية إستقبال و عملية حسابية. او قم بعمل مثل سابق فورم لكل حقل و زر إرسال في نهاية كل سطر في جدول. اقتباس
السؤال
Abdulazeez Altameemi
لدي عدة ادخالات وكل ادخال له form خاص به
لما اقوم بأدخال قيمة في ادخال معين يقوم بحذف قيم الادخالات السابقة ويرجع قيمتهم None
ممكن طريق احافظ على القيم السابقة لكل ادخال
5 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.