Я не могу добавить электронное письмо любому пользователю, созданному мной с помощью администратора django - PullRequest
0 голосов
/ 16 июня 2020

вот моя проблема, у меня есть веб-сайт с несколькими пользователями, но я разделил пользователей на 2, Доктор и Пациент, Доктор имеет более высокий авторитет, чем Пациент, но всякий раз, когда я добавляю user.doctor, я не получаю их электронную почту адрес, но только адрес электронной почты может использоваться для входа в систему, тем временем я настраиваю каждую регистрацию, которую любой пользователь делает, чтобы автоматически создавать пациента, поэтому я могу обновить их с помощью панели администратора, но если я создам любого пользователя напрямую, я не получу его электронную почту только остальная информация here is the error in picture, it is suppose to return the email address but it has no email address to return because i dont get to add any email показанные адреса электронной почты - это те, которые я создал с помощью веб-сайта или createuperuser

вот мой код

models.py

class CustomUser(AbstractUser):
    is_doctor = models.BooleanField(default=False)

    def __str__(self):
        return self.email


class Status(models.Model):
    title= models.CharField(max_length=5)


    def __str__(self):
        return self.title


class Doctor(models.Model):
    user = models.OneToOneField(CustomUser, on_delete=models.CASCADE, null=True, related_name="doctor")
    image = models.ImageField(default='jazeera.jpg', upload_to='profile_pics')
    bio = models.TextField()
    speciality = models.CharField(max_length=300)
    describtion = models.CharField(max_length=100)
    status = models.ManyToManyField(Status)



    def __str__(self):
        return f'{self.user.username}'


    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)


        img = Image.open(self.image.path)

        if img.height > 300 or img.width > 300:
            output_size = (300, 300)
            img.thumbnail(output_size)
            img.save(self.image.path)



class Patient(models.Model):
    user = models.OneToOneField(CustomUser, on_delete=models.CASCADE, null=True, related_name="patient")
    subscribe = models.BooleanField(default=False)

    def __str__(self):
        return f'{self.user.username}'



@receiver(post_save, sender=CustomUser)
def create_user_profile(sender, instance, created, **kwargs):
    print("****", created)
    if instance.is_doctor:
        Doctor.objects.get_or_create(user=instance)

    else:
        Patient.objects.get_or_create(user=instance)



@receiver(post_save, sender=CustomUser)
def save_user_profile(sender, instance, **kwargs):
    print("_-----")
    # print(instance.internprofile.bio, instance.internprofile.location)
    if instance.is_doctor:
        instance.doctor.save()
    else:
        Patient.objects.get_or_create(user=instance)

forms.py

class CustomUserCreationForm(UserCreationForm):

    class Meta(UserCreationForm.Meta):
        model = CustomUser
        fields = ('email', 'username',)

class CustomUserChangeForm(UserChangeForm):

    class Meta:
        model = CustomUser
        fields = ('email', 'username',)



class CustomUserUpdateForm(forms.ModelForm):
    email = forms.EmailField()

    class Meta:
        model = CustomUser
        fields = ['email', 'username']


class DoctorUpdateForm(forms.ModelForm):
    class Meta:
        model = Doctor
        fields = ['image', 'speciality', 'bio']

class PatientUpdateForm(forms.ModelForm):
    class Meta:
        model = Patient
        fields = [ 'subscribe' ]

admin.py

from .forms import CustomUserCreationForm, CustomUserChangeForm,CustomUserUpdateForm
from .models import CustomUser,Doctor,Patient,Status

class CustomUserAdmin(UserAdmin):
    add_form = CustomUserCreationForm
    form = CustomUserChangeForm
    edit_form = CustomUserUpdateForm
    model = CustomUser
    list_display = ['email', 'username',]

admin.site.register(CustomUser, CustomUserAdmin)

1 Ответ

0 голосов
/ 30 июня 2020

Я обнаружил, что адрес электронной почты также будет добавлен вручную с сайта администратора

[! в админке вам просто нужно отредактировать и добавить его ] 1

...