اذهب إلى المحتوى

السؤال

نشر (معدل)

مرحبا لدي فورم "تواصل معنا" لايظهر أي رسالة خطأ لكن لايتم ارسال البيانات الى قاعدة البيانات 

Settings.py

INSTALLED_APPS = [  'import_export',
                       ... ]

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME':'medical',
        'USER': 'root',
        'PASSWORD':'',
        'HOST': '127.0.0.1',   
        'PORT': '3306',
    
    }
}

admin.py

from django.contrib import admin
from .models import Profile
from import_export.admin import ImportExportModelAdmin
# Register your models here.


class ProfileAdmin(ImportExportModelAdmin, admin.ModelAdmin):
     pass 

admin.site.register(Profile)

views.py

def contact_U(request):
        if request.method == 'POST':
            form = ContactU(request.POST)
            if form.is_valid():
                subject = "Website Inquiry" 
                body = {
                'first_name': form.cleaned_data['first_name'], 
                'last_name': form.cleaned_data['last_name'], 
                'email': form.cleaned_data['email_address'], 
                'message':form.cleaned_data['message'], 
                }
                message = "\n".join(body.values())

                try:
                    send_mail(subject, message, 'admin@example.com', ['admin@example.com']) 
                except BadHeaderError:
                    return HttpResponse('Invalid header found.')
                #   return redirect ("accounts:Thanks")
        
        form = ContactU()
        return render(request, 'user/contact_U.html', {   'contact_U' : contact_U,
        })

forms.py

class ContactU(forms.Form):
      first_name = forms.CharField(max_length = 50)
      last_name = forms.CharField(max_length = 50)
      email_address = forms.EmailField(max_length = 150)
      message = forms.CharField(widget = forms.Textarea, max_length = 2000)
      class Meta: 
            model = User
            fields = ('first_name','last_name','email_address','message')

جزء من كود HTML:

     <form method="POST" enctype="multipart/form-data" >
        {% csrf_token %}
      <div class="row">
        <div class="col-md-4 form-group">
          <input type="text" name="first_name" class="form-control" id="first_name" placeholder="first_name" data-rule="minlen:4" data-msg="Please enter at least 4 chars">
          {{form.first_name}}
            <div class="validate"></div>
        </div>
          <div class="col-md-4 form-group mt-3 mt-md-0">
          <input type="tel" class="form-control" name="email_address" id="email_address" placeholder="email_address" data-rule="minlen:4" data-msg="Please enter at least 2 chars">
          {{form.email_address}}
            <div class="validate"></div>
        </div>

 

تم التعديل في بواسطة Zeina Makdisi

Recommended Posts

  • 0
نشر
بتاريخ 3 دقائق مضت قال Zeina Makdisi:

قمت بمشاركته سابقا 

تمام الخطأ في عملية الوراثة 

class ContactU(forms.ModelForm): # نستبدل Form -> ModelForm
      first_name = forms.CharField(max_length = 50)
      last_name = forms.CharField(max_length = 50)
      email_address = forms.EmailField(max_length = 150)
      message = forms.CharField(widget = forms.Textarea, max_length = 2000)
      class Meta: 
            model = User
            fields = ('first_name','last_name','email_address','message')

 

  • 1
نشر

هناك بعض الأخطاء التي من الممكن كانت سبب المشكلة أو جزء منها :

  • السبب الأول هو عدم استدعاء الدالة save التي بدورها تقوم بحفظ البيانات في قاعدة البيانات 
    def contact_U(request):
            if request.method == 'POST':
                form = ContactU(request.POST)
                if form.is_valid():
                    subject = "Website Inquiry" 
                    body = {
                    'first_name': form.cleaned_data['first_name'], 
                    'last_name': form.cleaned_data['last_name'], 
                    'email': form.cleaned_data['email_address'], 
                    'message':form.cleaned_data['message'], 
                    }
                    message = "\n".join(body.values())
    		form.save()    # هذه الدالة بدورها تقوم بحفظ البيانات 
                    try:
                        send_mail(subject, message, 'admin@example.com', ['admin@example.com']) 
                    except BadHeaderError:
                        return HttpResponse('Invalid header found.')
                    #   return redirect ("accounts:Thanks")
            
            form = ContactU()
            return render(request, 'user/contact_U.html', {   'contact_U' : contact_U,
            })

     

  • السبب الثاني ممكن أن الفورم ليست محققة ، وذلك لعدة أسباب منها عدم تحقق شروط الfields أو نسيان أحد الفيلد في فورم html ، لتحقق من الفورم محققة يرجى إضافة سطر يقوم بطباعة التأكيد 

    
     if form.is_valid():
        print("محققة ") # إضافة السطر لتحقق
        subject = "Website Inquiry" 
        body = {
          'first_name': form.cleaned_data['first_name'], 
          'last_name': form.cleaned_data['last_name'], 
          'email': form.cleaned_data['email_address'], 
          'message':form.cleaned_data['message'], 
        }
      else:
        print("not valid")

      

  • فورم html غير مكتمل ، ألاحظ أن ال last_name غير موجودة ، فهذا ممكن أن يكون مشكلة أو جزء منها 

  • 0
نشر

شكرا لك 

بعد اضافة form.save() اصبح يظهر الخطأ التالي في المتصفح عند ارسال البيانات 

AttributeError at /accounts/contact_U/

'ContactU' object has no attribute 'save'

علما أن كود Html: 

  1. {% extends 'base.html' %}
    {% load static %}
    {% block body %}
    <section id="appointment" class="appointment section-bg">
      <div class="container">
    
          <form method="POST"  >
            {% csrf_token %}
          <div class="row">
            <div class="col-md-4 form-group">
              <input type="text" name="first_name" class="form-control" id="first_name" placeholder="first_name" data-rule="minlen:4" data-msg="Please enter at least 4 chars">
              {{form.first_name}}
                <div class="validate"></div>
            </div>
            <div class="col-md-4 form-group mt-3 mt-md-0">
              <input type="text" class="form-control" name="last_name" id="last_name" placeholder=" last_name" data-rule="minlen:4" data-msg="Please enter at least 4 chars">
              {{form.last_name}}
                 <div class="validate"></div>
            </div>
            <div class="col-md-4 form-group mt-3 mt-md-0">
              <input type="email" class="form-control" name="email_address" id="email_address" placeholder="email_address" data-rule="email" data-msg="Please enter a valid email">
              {{form.email_address}}
                <div class="validate"></div>
            </div>
          </div>
          {% comment %} <div class="row">
            <div class="col-md-4 form-group mt-3">
              <input type="datetime" name="subtitle" class="form-control datepicker" id="subtitle" placeholder="Subtitle" data-rule="minlen:4" data-msg="Please enter at least 4 chars">
              {{form.subtitle}}
                 <div class="validate"></div>
            </div>
            {% endcomment %}
    
          <div class="form-group mt-3">
            <textarea class="form-control" name="message" rows="5" placeholder="Message (Optional)"></textarea>
            {{form.message}}
            <div class="validate"></div>
          </div>
          <div class="mb-3">
            <div class="loading">Loading</div>  
            <div class="error-message"></div>
            <div class="sent-message">Your appointment request has been sent successfully. Thank you!</div>
          </div>
          <div class="text-center"><button type="submit">Make an Appointment</button></div>
        </form>
    
      </div>
    </section>
    
            {% endblock body %}

     

  • 0
نشر

الخطأ في الموديل

class ContactU(forms.Form):
      first_name = forms.CharField(max_length = 50)
      last_name = forms.CharField(max_length = 50)
      email_address = forms.EmailField(max_length = 150)
      message = forms.CharField(widget = forms.Textarea, max_length = 2000)
      class Meta: 
            model = User # اليوزر لا يملك فيلد message
            fields = ('first_name','last_name','email_address','message')

ثانياً:

الفورم هل يلزم تسجيل الدخول او لا يلزم ؟ اذا لا يلزم اعمل التالي

المودل

class ContactUs(models.Model):
    name = models.CharField(max_length=50)
    email = models.EmailField() # اذا اردت بالامكان استبداله لرقم الجوال او الهاتف حسب احتياجك
    subject = models.CharField(max_length=50)
    message = models.TextField()
    created_date = models.DateTimeField(auto_now_add=True, null=True, blank=True)
    # فيلدات اخرى حسب الرغبة

    def __str__(self):
        return self.name

بعد الميجريشن نروح الفورم ونعمل الفورم على هذا المودل.

بيكون شكله اشبه بهذا الشكل

class ContactUsForm(forms.ModelForm):
    class Meta:
        model = ContactUs
        fields = __all__

ثم تروح الفيو وتعرف الفورم على الفيو اسهل طريقة تعملها عن طريق CBV

بيكون بمثل هذا الشكل

class ContactUsCreateView(CreateView):
    model = ContactUs
    template_name = '' # موقع التمبلت
    form_class = ContactUsForm

ثم تربط الفيو بال URL وتكمل العملية بالتمبلت

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...