Abderrahmane Boulkenafet نشر 13 مارس أرسل تقرير نشر 13 مارس اريد صناعة عدة اصناف ترث من الصنف User حيث اضيف لكل صنف اشياء تخصه بحث استعملها لانشاء مستخدمين مثلا الصنف vendor فيه خاصية type = models.charField(max_length = 20 , default ='vendor') و عدة خواص اخرى , في نفس الوقت عند تسجيل بائع جديد , اريد استخدام هذا الصنف للتسجيل بدلا من User و ايضا صنف customer له عدة خواص مختلفة عن ما يرث منه مثلا type = models.charField(max_length = 20 , default ='customer') , يرث ايضا من user , و يستعمل لانشاء مستخدمين بدلا من User حاولت فعل هذا لكنني تلقيت اخطاء كثيرة class Vendor(AbstractUser): type = models.CharField( max_length=50,default = "vendor") def __init__(self, username="test1",password='pass_test',is_staff=False,*args: Any, **kwargs: Any) -> None: super().__init__(username,password,*args, **kwargs) 1 اقتباس
1 ياسر مسكين نشر 13 مارس أرسل تقرير نشر 13 مارس يمكنك استخدام التوريث لإنشاء فئات فرعية من الصنف User بهذا الشكل: from django.contrib.auth.models import AbstractUser from django.db import models class User(AbstractUser): # خيارات نوع المستخدم USER_TYPE_CHOICES = ( ('vendor', 'Vendor'), ('customer', 'Customer'), ) # حقل نوع المستخدم user_type = models.CharField(max_length=20, choices=USER_TYPE_CHOICES) # فئة فرعية لبائع class Vendor(User): # خاصية خاصة بالبائع vendor_specific_property = models.CharField(max_length=100) # فئة فرعية للعميل class Customer(User): # خاصية خاصة بالعميل customer_specific_property = models.CharField(max_length=100) حيث بداية تقوم بتعريف فئة User التي تمثل المستخدم الأساسي وتحتوي على خيارات نوع المستخدم وحقل لتحديد نوع المستخدم. ثم ننشئ فئات فرعية (Vendor وCustomer) ترث من الفئة الأساسية User ونضيف الخصائص الخاصة لكل فئة. هذا الحل يسمح لنا بإنشاء مستخدمين من نوعين مختلفين (بائع وعميل) وتخصيص الخصائص الخاصة بهم بسهولة. 1 اقتباس
1 Mustafa Suleiman نشر 13 مارس أرسل تقرير نشر 13 مارس في البداية عليك تعريف صنف User الأساسي، حيث نستخدم AbstractUser من Django كقاعدة لصنف User، ويوفر AbstractUser جميع الخصائص والوظائف الأساسية للمستخدمين في Django، أي يمكننا إضافة أي خصائص إضافية نحتاجها إلى صنف User. class User(AbstractUser): phone_number = models.CharField(max_length=20) address = models.CharField(max_length=255) ثم تعريف صنف Vendor، ونرث من صنف User باستخدام class Vendor(User)، ونضيف خاصية type مميزة لصنف Vendor لتحديد نوع المستخدم، ونستطيع إضافة أي خصائص إضافية محددة لصنف Vendor نحتاجها. class Vendor(User): type = models.CharField(max_length=50, default="vendor") company_name = models.CharField(max_length=255) business_license_number = models.CharField(max_length=20) ثم تعريف صنف Customer، ونرث من صنف User باستخدام class Customer(User):، ونضيف خاصية type مميزة لصنف Customer لتحديد نوع المستخدم، أيضًا إضافة أي خصائص إضافية محددة لصنف Customer نحتاجها. class Customer(User): type = models.CharField(max_length=50, default="customer") shipping_address = models.CharField(max_length=255) billing_address = models.CharField(max_length=255) الآن نستخدم Vendor.objects.create_user لإنشاء بائع جديد ونمرر اسم المستخدم وكلمة المرور وخصائص أخرى إلى الطريقة create_user. from django.contrib.auth import authenticate username = "test_vendor" password = "password1234" vendor = Vendor.objects.create_user(username=username, password=password, type="vendor") # ... (إتمام عملية تسجيل البائع) أو نستخدم Customer.objects.create_user لإنشاء عميل جديد، ونمرر اسم المستخدم وكلمة المرور وخصائص أخرى إلى الطريقة create_user. from django.contrib.auth import authenticate username = "test_customer" password = "password5678" customer = Customer.objects.create_user(username=username, password=password, type="customer") # ... (إتمام عملية تسجيل العميل) وعليك استخدام الطريقة create_user الخاصة بكل صنف، واستيراد جميع النماذج (models) المُستخدمة في الكود. 1 اقتباس
0 Abderrahmane Boulkenafet نشر 13 مارس الكاتب أرسل تقرير نشر 13 مارس بتاريخ 4 ساعة قال ياسر مسكين: يمكنك استخدام التوريث لإنشاء فئات فرعية من الصنف User بهذا الشكل: from django.contrib.auth.models import AbstractUser from django.db import models class User(AbstractUser): # خيارات نوع المستخدم USER_TYPE_CHOICES = ( ('vendor', 'Vendor'), ('customer', 'Customer'), ) # حقل نوع المستخدم user_type = models.CharField(max_length=20, choices=USER_TYPE_CHOICES) # فئة فرعية لبائع class Vendor(User): # خاصية خاصة بالبائع vendor_specific_property = models.CharField(max_length=100) # فئة فرعية للعميل class Customer(User): # خاصية خاصة بالعميل customer_specific_property = models.CharField(max_length=100) حيث بداية تقوم بتعريف فئة User التي تمثل المستخدم الأساسي وتحتوي على خيارات نوع المستخدم وحقل لتحديد نوع المستخدم. ثم ننشئ فئات فرعية (Vendor وCustomer) ترث من الفئة الأساسية User ونضيف الخصائص الخاصة لكل فئة. هذا الحل يسمح لنا بإنشاء مستخدمين من نوعين مختلفين (بائع وعميل) وتخصيص الخصائص الخاصة بهم بسهولة. بتاريخ 4 ساعة قال Mustafa Suleiman: في البداية عليك تعريف صنف User الأساسي، حيث نستخدم AbstractUser من Django كقاعدة لصنف User، ويوفر AbstractUser جميع الخصائص والوظائف الأساسية للمستخدمين في Django، أي يمكننا إضافة أي خصائص إضافية نحتاجها إلى صنف User. class User(AbstractUser): phone_number = models.CharField(max_length=20) address = models.CharField(max_length=255) ثم تعريف صنف Vendor، ونرث من صنف User باستخدام class Vendor(User)، ونضيف خاصية type مميزة لصنف Vendor لتحديد نوع المستخدم، ونستطيع إضافة أي خصائص إضافية محددة لصنف Vendor نحتاجها. class Vendor(User): type = models.CharField(max_length=50, default="vendor") company_name = models.CharField(max_length=255) business_license_number = models.CharField(max_length=20) ثم تعريف صنف Customer، ونرث من صنف User باستخدام class Customer(User):، ونضيف خاصية type مميزة لصنف Customer لتحديد نوع المستخدم، أيضًا إضافة أي خصائص إضافية محددة لصنف Customer نحتاجها. class Customer(User): type = models.CharField(max_length=50, default="customer") shipping_address = models.CharField(max_length=255) billing_address = models.CharField(max_length=255) الآن نستخدم Vendor.objects.create_user لإنشاء بائع جديد ونمرر اسم المستخدم وكلمة المرور وخصائص أخرى إلى الطريقة create_user. from django.contrib.auth import authenticate username = "test_vendor" password = "password1234" vendor = Vendor.objects.create_user(username=username, password=password, type="vendor") # ... (إتمام عملية تسجيل البائع) أو نستخدم Customer.objects.create_user لإنشاء عميل جديد، ونمرر اسم المستخدم وكلمة المرور وخصائص أخرى إلى الطريقة create_user. from django.contrib.auth import authenticate username = "test_customer" password = "password5678" customer = Customer.objects.create_user(username=username, password=password, type="customer") # ... (إتمام عملية تسجيل العميل) وعليك استخدام الطريقة create_user الخاصة بكل صنف، واستيراد جميع النماذج (models) المُستخدمة في الكود. نجحت الطريقة معي الى حد ما هذا هو الكود USER_TYPE_CHOICES = ( ('vendor', 'Vendor'), ('customer', 'Customer'), ) # Create your models here. class MyUser(AbstractUser): # خيارات نوع المستخدم pass # فئة فرعية لبائع class Vendor(MyUser): # خاصية خاصة بالبائع vendor_specific_property = models.CharField(max_length=100) store_deposit_account = models.CharField(max_length = 100 ,default='0000 0000 0000 0000') user_type = models.CharField(max_length=20, choices=USER_TYPE_CHOICES , default='vendor') class meta: verbose_name ='vendor' # فئة فرعية للعميل class Customer(MyUser): # خاصية خاصة بالعميل customer_specific_property = models.CharField(max_length=100) lives_in=models.CharField(max_length=50 ,default ='Algeria') user_type = models.CharField(max_length=20, choices=USER_TYPE_CHOICES , default='customer') class meta: verbose_name ='vendor' admin.site.register(MyUser) admin.site.register(Customer) admin.site.register(Vendor) لكنها تظهر هكذا في صفحة الadmin رغم انني حاولت تحديد الverbose_name فكيف حل هذه المشكلة؟ ايضا ,هل هناك طريقة للحد من عدد الحقول في صفحة الadmin و اظهار حقول معينة عند الانشاء؟ ف.. هذا اكثر من المرغوب فيه ايضا @Mustafa Suleiman هل هناك طريقة لفعل هذا من الterminal ؟ vendor = Vendor.objects.create_user(username=username, password=password, type="vendor") 1 اقتباس
السؤال
Abderrahmane Boulkenafet
اريد صناعة عدة اصناف ترث من الصنف User حيث اضيف لكل صنف اشياء تخصه بحث استعملها لانشاء مستخدمين
مثلا الصنف vendor فيه خاصية
و عدة خواص اخرى , في نفس الوقت
عند تسجيل بائع جديد , اريد استخدام هذا الصنف للتسجيل بدلا من User
و ايضا صنف customer له عدة خواص مختلفة عن ما يرث منه
مثلا
, يرث ايضا من user , و يستعمل لانشاء مستخدمين بدلا من User
حاولت فعل هذا لكنني تلقيت اخطاء كثيرة
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.