2013-06-12 3 views
0

Я в ситуации, когда я не могу использовать наследование. Скажем, у меня есть две модели, а Person и Passport, для этого примера предположим, что они имеют отношение один-к-одному:Использовать поля между OneToOneField в модели

class Passport(models.Model): 
    full_name = models.CharField() 



class Person(models.Model): 
    passport = models.OneToOneField(Passport) 

сейчас отсюда, я хочу, чтобы получить Person «s full_name. В моей заявке Person не может существовать без уникального Passport, поэтому как мне получить доступ к атрибуту full_name через объект Person. Я в конечном счете, хочу, чтобы иметь возможность сделать что-то вроде этого:

class Person(models.Model): 
    passport = models.OneToOneField(Passport) 

    def __unicode__(self): 
     return self.passport.full_name 

Есть простое решение этой проблемы является Django?

+0

Какая ошибка у вас? –

+0

Да, ваш пример работает 100%. –

+0

Это моя ошибка - получается, что одна из моих моделей была добавлена ​​без синхронизации/миграции моей базы данных. Я получал ошибку и заставлял думать, что это не сработает. – Joker

ответ

0

Да, простой и правильный способ сделать это именно то, что вы сделали: self.passport.full_name возвращает полное имя человека, которое является атрибутом паспорта.

Обратите внимание, что, поскольку ваш пароль ForeignKey не может быть нулевым, как вы его определили, самообслуживание всегда будет существовать.

Смежные вопросы