Ethra8 / english-grows

Project 5 : E-commerce
0 stars 1 forks source link

Once Profiles app created, error at login #35

Closed Ethra8 closed 1 hour ago

Ethra8 commented 2 hours ago

Once Profiles app created, access for previously created users (in this case, admin superuser) gives following error in debug=True mode:

Image

Ethra8 commented 1 hour ago

After some research, I found that error comes from the fact that even if the following def in profiles.models creates a profile every time a user is created, this function does not create profile instances for previously created users:

class UserProfile(models.Model):
    """
    A user profile model for maintaining default
    delivery information and order history
    """
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    default_full_name = models.CharField(max_length=80, null=True, blank=True)
    default_phone_number = models.CharField(max_length=20, null=True, blank=True)
    default_street_address1 = models.CharField(max_length=80, null=True, blank=True)
    default_street_address2 = models.CharField(max_length=80, null=True, blank=True)
    default_town_or_city = models.CharField(max_length=40, null=True, blank=True)
    default_postcode = models.CharField(max_length=20, null=True, blank=True)
    default_country = CountryField(blank_label='Country', null=True, blank=True)

    def __str__(self):
        return self.user.username

@receiver(post_save, sender=User)
def create_or_update_user_profile(sender, instance, created, **kwargs):
    """
    Create or update the user profile
    """
    if created:
        UserProfile.objects.create(user=instance)
    # Existing users: just save the profile
    instance.userprofile.save()

SOLUTION: Via the shell:

  1. In terminal : python manage.py shell
  2. Inside the shell, run this script to create missing profiles for any users that don’t already have one:
    
    from django.contrib.auth.models import User
    from your_app_name.models import UserProfile

for user in User.objects.all(): UserProfile.objects.get_or_create(user=user)


![Image](https://github.com/user-attachments/assets/092188db-73fa-40f3-954e-ca89abbe6918)