Django Foreign Key Отношения и создание - PullRequest
0 голосов
/ 04 апреля 2011

У меня есть следующее: models.py

class User(models.Model):
    email = models.EmailField(unique=True)
    passwd = models.CharField()
    sessionID = models.CharField()

class StudentProfile(models.Model):
    school = models.CharField()
    name = models.CharField()
    user = models.ForeignKey(User, unique=True)

Я не понимаю, как создавать Users и StudentProfiles в django и связывать их. Может ли кто-нибудь предоставить пример кода для создания пользователя, а затем создать StudentProfile, который ссылается на пользователя. Могут ли они также опубликовать пример кода доступа, т.е., скажем, у меня есть электронное письмо, пожалуйста, покажите, как я буду искать пользователя, а затем получите доступ к сопроводительной информации профиля. Могу ли я написать метод как часть модели User для этого?

inb4 Почему вы не используете модель Django User? Это такое же упражнение на размышление, как и все остальное, я также хочу сделать свой собственный, потому что материал Django был намного больше, чем мне было нужно. Я предпочитаю это сладко и просто.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 04 апреля 2011

В дополнение к ответу Жифера - Вы можете подойти к вещам даже немного более простым:

user = User()
user.email = 'anon@anon.com'
user.save()

profile = StudentProfile()
profile.school = 'MIT'
profile.user = user
profile.save()

Чтобы получить связанные предметы, вы также можете использовать связанный менеджер :

user.profile_set.all()[0] должен вернуть связанный StudentProfile для созданного пользователя.

И поэтому user.profile_set.all()[0].school должен вернуть MIT, пока profile.user.email возвращает anon@anon.com

Все это немного более подробно описано в этом посте: Работа с моделями Django

И, наконец, вы можете написать get_profile метод user -модели следующим образом:

def get_profile(self):
    return self.profile_set.all()[0]
1 голос
/ 04 апреля 2011

Если у вас есть вышеперечисленные модели, вы можете получить доступ к профилю, указанному по электронной почте:

profile = StudentProfile.objects.get(user__email = 'test@test.com')
school = profile.school

Я думаю, что если вы хотите, чтобы метод в пользовательской модели делал это, вы можете сделать то же самое:

def get_profile(email):
    return StudentProfile.objects.get(user__email = 'test@test.com')

Для ссылки:

u = User.objects.create(email="test@test.com", passwd="test", sessionId=1) 
StudentProfile.objects.create(school="test", name="student", user=u)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...