Как получить доступ к данным, используя обратную ссылку на внешний ключ в django - PullRequest
0 голосов
/ 18 мая 2019

У меня есть модель с именем UserProfile и модель PersonalInformation.Я хотел бы получить все данные PersonalInformation с использованием модели UserProfile, когда пользователь вошел в систему через веб-сайт, но у меня есть ссылка на внешний ключ в модели PersonalInformation с моделью UserProfile, так как мне получить личную информацию с помощью модели UserProfile?

Модель профиля пользователя:

class UserProfile(models.Model):
"""Represents a user's model inside our system"""

    email = models.EmailField(max_length=255, unique=True)
    name = models.CharField(max_length=255)
    profile_picture = models.ImageField(upload_to='photos/%y/%m/%d/')
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)
    highest_degree_earned = models.CharField(max_length=255, blank=False)
    college_name = models.CharField(max_length=255, blank=False)
    graduation_year = models.IntegerField(default=2020, blank=False)

Персональная информация Модель:

class PersonalInformation(models.Model):
    """Represents a user's personal Infromation inside our system"""

    user = models.ForeignKey(UserProfile, on_delete=models.CASCADE)
    mobile = models.CharField(max_length=10 ,blank=True)
    bio = models.TextField(max_length=200, blank=True)
    college_university = models.CharField(max_length=100, blank=False)
    course = models.CharField(max_length=100, blank=False)

1 Ответ

0 голосов
/ 18 мая 2019

Прежде всего, в коде вы показываете, что у вас неправильные названия моделей. Имя модели UserProfile устанавливается как PersonalInformation, измените его, иначе миграции не будут работать (оно не принимается в базе данных, независимо от того, какую вы используете). Отвечая на вопрос, который вы задаете, чтобы получить связанный экземпляр PersonalInformation определенного экземпляра UserProfile, вам нужно просто запросить следующее:

user = UserProfile.objects.get(id='') #Introduce the id of the user you want to fetch its personal information.
user.personalinformation_set.all() # This will return you a QuerySet with all the related instances of PersonalInformation class.
user.personalinformation_set.get(id='') #To get a specific one or you may use a filter to get a filtered QS.

Если вы хотите, вы можете использовать атрибут related_name для класса ForeignKey, чтобы установить другое имя из personalinformation_set. Я также рекомендую вам прочитать документацию по Django, она действительно хорошо объяснена и понятна: https://docs.djangoproject.com/en/2.2/topics/db/examples/many_to_one/

Как я видел в комментарии, вы также можете подумать об использовании отношения OneToOne вместо ForeignKey, если вы ожидаете только один экземпляр PersonalInformation на пользователя. Документация находится по адресу: https://docs.djangoproject.com/en/2.2/topics/db/examples/one_to_one/

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