اضافة custom user model في Django

زياد العتيبيمنذ 3 سنوات

Django 

تأتي مع user model الذي في django.contrib.auth وfields التي فيه كالتالي:

username: مطلوب، اقصى عدد  characters هو 150

 

first_name: اختياري(blank=True)

 

last_name: اختياري(blank= True)

 

email: اختياري(blank= True)

 

password: مطلوب، هو hash لpassword 

لان Django لا تخزن raw password

وغير هذه fields تجدها هنا

 https://docs.djangoproject.com/en/3.0/ref/contrib/auth/

ماذا لو اردنا اضافة phone number؟ لكي نعمل تسجيل دخول بphone number بالاضافة للemail كما في المواقع المشهورة.

هنا نحتاج اضافة user custom model (ملاحظة: ساشرح كيف تضيف fields على user model وليس استبداله مع model اخر، وايضا هناك اكثر من طريقة انا شرحت احد الطرق)

الان بعد عمل Django project وعمل app داخله اذهب لmodels.py واضف التالي

‏from django.contrib.auth.models import User

‏class Profile(models.Model):
‏    user = models.OneToOneField(User, on_delete=models.CASCADE)
‏    phone = models.CharField(max_length=10)

سميناه Profile. اضفنا user لنعمل علاقة one to one مع User model واضفنا on_delete=models.CASCADE لان اذا تم حذفuser ينحذف معه Profile model 

الان عندما نعمل user جديد في views.py لن يتم عمل Profile معه لذلك علينا اما ان نجعل phone=blank والمستخدم سيضيف الرقم لاحقا وبهذه الطريقة نعمل signals داخل models.py لكي يتم انشاء Profile تلقائيا مع اي user او مثل مثالنا سنستخدم save() method مع User وProfile في ملف views.py لكي ننشئهم ونحفظهم

مثل هذه الطريقة 

def register_user(request):
if request.method == 'POST':
        register = RegisterForm(request.POST)
        usrprofile = ProfileForm(request.POST)
        if register.is_valid() and usrprofile.is_valid():
            user = register.save()
            usrprof = usrprofile.save(commit=False)
            usrprof.user = user
            usrprof.save()
            return HttpResponse('congrats')
         else:
            return HttpResponse('errors')

عملنا commit=False لكي نعدل عليه ونضيف user وبعدها عملنا save() ليتم انشاءه في database

طبعا ستحتاج تعمل form لUser وform لProfile

كلمات دليلية: django
1
إعجاب
1066
مشاهدات
0
مشاركة
2
متابع

التعليقات (0)

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !