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

Error in django 'PatientManager' object has no attribute 'normalize_email'

Abdollahi Mohammed

السؤال

احاول التعامل مع أنواع مختلفة من المستخدمين في مشروع جانقو ولكنني اواجه هذه المشكلة عندما احاول تسجيل مستخدم جديد من نوع مريض من خلال هذه الدالة

def signup(request):
    form = PatientSignUpForm()
    print('test')
    if request.method == "POST":
        form = PatientSignUpForm(request.POST)
        if form.is_valid():
            print('tesitng adding user')
            patient = form.save()
            patientMore = PatientMore.objects.create(
                gender = form.cleaned_data.get('gender'),
                job = form.cleaned_data.get('job'),
                user = patient
            )
            print('done')
            return redirect('home')
    return render(request, 'signup.html', {'form':form})

استخدمت البروكسي للتفريق بين انواع المستخدمين وقمت بعمل manager لكل نوع وهذه هي ال models

class User(AbstractUser):

    class Types(models.TextChoices):
        Patient = 'Patient', 'Patient'
        Doctor = 'Doctor', 'Doctor'
        StaffMember = 'Staff', 'Staff'

    type = models.CharField(_("Type"), max_length=50, choices=Types.choices, default=Types.Patient)

    name = models.CharField(_('name of user'), blank=True, max_length=255)

    def get_absolute_url(self):
        return reverse('users:detail', kwargs={'username': self.username})

class PatientMore(models.Model):
    GENDER_MALE = 0
    GENDER_FEMALE = 1
    GENDER_CHOICES = [(GENDER_MALE, 'Male'), (GENDER_FEMALE, 'Female')]
    gender = models.IntegerField(choices=GENDER_CHOICES)
    job = models.CharField(max_length=100, null=True, blank=True)
    user = models.OneToOneField(User, on_delete=models.CASCADE)

class PatientManager(models.Manager):
    def get_queryset(self, *args, **kwargs):
        return super().get_queryset(*args, **kwargs).filter(type=User.Types.Patient)

class Patients(User):
    objects = PatientManager()

    @property
    def more(self):
        return self.patientmore

    class Meta:
        proxy = True

    def save(self, *args, **kwargs):
        if not self.pk:
            self.type = User.Types.Patient
        return super().save(*args, **kwargs)

class DoctorMore(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    specialist_doctor = models.CharField(max_length=100, null=True, blank=True)

class DoctorManager(models.Manager):
    def get_queryset(self, *args, **kwargs):
        return super().get_queryset(*args, **kwargs).filter(type=User.Types.Doctor)

class Doctors(User):
    objects = DoctorManager()

    @property
    def more(self):
        return self.doctormore

    class Meta:
        proxy = True

    def save(self, *args, **kwargs):
        if not self.pk:
            self.type = User.Types.Doctor
        return super().save(*args, **kwargs)

شكرا لكم

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

لا توجد أي إجابات على هذا السؤال بعد

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...