اضافة custom user model في Django
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
التعليقات (0)
لايوجد لديك حساب في عالم البرمجة؟
تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !