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

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

السؤال

نشر

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

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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...