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

السؤال

نشر

أحاول إنشاء نموذج form لتعديل بيانات المستخدم (Profile Page). لذلك أحتاج إلى تضمين بعض الحقول من نموذج المستخدم ونموذج Profile. حاليا أنا أستخدم نموذجين بالشكل التالي:

class ProfileForm(ModelForm):
    class Meta:
        model = UserProfile
        fields = ("bio", "phone", "email", "username")
        
class UserEditForm(ModelForm):
    class Meta:
        model = User
        fields = ("name", "age")

هل هناك طريقة لدمج نموذجين في نموذج واحد أم أحتاج إلى إنشاء نموذج جديد بالكامل؟

Recommended Posts

  • 1
نشر (معدل)

إذا أردت عرض النموذجين كنموذج واحد في القالب لا يجب عليك دمجُهُما بس استعملهما داخل عنصر <form> واحد. مثال ذلك:

<form action="/your-url/" method="post">
    {% csrf_token %}
    {{ profileForm }}
    {{ userEditForm }}
    <input type="submit" value="Submit">
</form>

ثم فقط قُم بمعالجة النماذج بشكل منفصل في العرض (View):

def your_view(request):
    # في حالة 
    # GET
    #  نقوم بإنشاء كائن جديد من كل نموذج وإرساله إلى القالب للعرض 
    if request.method == "GET":
      	profileForm = ProfileForm()
        userEditForm = UserEditForm()
    
    # أما في حالة 
    # POST 
    # 
    elif request.method == 'POST':
        # نقوم بإنشاء النموذجين وملئهما بالبيانات المُرسلة من القالب
        profileForm = ProfileForm(request.POST)
        userEditForm = UserEditForm(request.POST)
        # بعدها نتحقق في ماإذا كانت البيانات صالحة في النموذجين وليس بها أخطاء
        if profileForm.is_valid() and userEditForm.is_valid():
            # إذا كانت البيانات صالحة نقوم بحفظها وإرسال العميل إلى صفحة أخرى
            profileForm.save()
            userEditForm.save()
            return HttpResponseRedirect('/thanks/')        

    return render(request, 'template.html', {'profileForm': profileForm, 'userEditForm':userEditForm})

 

تم التعديل في بواسطة مسعود زاهي

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...