Проблема с внешним ключом в UserProfile django - PullRequest
0 голосов
/ 02 октября 2019

Я хочу получить данные профиля пользователя о пользователе, который вошел в систему. Например, основываясь на вошедшем в систему пользователе, я хочу получить страну пользователя из userprofile. Кажется простым, но мне не хватает какого-то мелкого шрифта. Много пробовал, но безуспешно.

Нужна помощь. Я пробовал и ссылался на документ Django, но я новичок

У меня следующая модель.

class User(AbstractUser):
    username = models.CharField(max_length=100,blank=True, null=True)
    email = models.EmailField(_('email address'), unique=True)
    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['username', 'first_name', 'last_name']

    def __str__(self):
        return "{}".format(self.email)

class UserProfile(models.Model):
 user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='profile')
    title = models.CharField(max_length=5)
    dob = models.DateField()
    address = models.CharField(max_length=255)
    country = models.CharField(max_length=50)
    city = models.CharField(max_length=50)
    zip = models.CharField(max_length=5)
    photo = models.ImageField(upload_to='uploads', blank=True)

1 Ответ

1 голос
/ 02 октября 2019

когда request достигает view функциональности django, у него есть параметр с именем request.user. это приложение, которое вы должны использовать.

if(request.user and request.user.is_authenticated()): 
    user_profile = UserProfile.objects.get(user=request.user)
    user_country = user_profile.country

или если вы используете OneToOneField

request.user.userprofile.country

Предложение:
1. При использовании пользовательской модели пользователя также задайте пользовательский менеджер.
2. отношение должно быть OneToOneField между User и UserProfile.

Объяснение приведенного выше кода.
Я использовал objects.get() Но в соответствии с вашей моделью objects.filter() вы должны использовать, потому что ForeignKeyField имеет много-не одно отношение. так же пользователь может иметь много профилей пользователей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...