Подтвердить что ты не робот

Модель внешнего ключа Django

Я пытаюсь создать 3 модели; Person, Address и Anniversy. План состоит в том, чтобы иметь один адрес и один аннуитет для каждого человека. Но каждый адрес и аннуитет могут иметь несколько человек.

До сих пор у меня есть следующее, но я думаю, что отношения OneToMany(foreign key) могут быть неправильными. каждый адрес может иметь одного человека, но каждый может иметь несколько адресов.

from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=50)
    birthday = models.DateField()

    def __unicode__(self):
        return u'%s' % (self.name)

class Address(models.Model):
    person = models.ForeignKey(Person)
    address = models.CharField(max_length=150)

    def __unicode__(self):
        return u'%s' % (self.address)

class Anniversy(models.Model):
    person = models.ForeignKey(Person)
    anniversy = models.DateField()

    def __unicode__(self):
        return u'%s' % (self.anniversy)
4b9b3361

Ответ 1

Вы создаете отношения по-другому; добавьте внешние ключи к типу Person для создания отношения "много-к-одному":

class Person(models.Model):
    name = models.CharField(max_length=50)
    birthday = models.DateField()
    anniversary = models.ForeignKey(Anniversary)
    address = models.ForeignKey(Address)

class Address(models.Model):
    line1 = models.CharField(max_length=150)
    line2 = models.CharField(max_length=150)
    postalcode = models.CharField(max_length=10)
    city = models.CharField(max_length=150)
    country = models.CharField(max_length=150)

class Anniversary(models.Model):
    date = models.DateField()

Любой человек может быть подключен только к одному адресу и одной годовщине, но адреса и юбилеи могут ссылаться на несколько записей Person.

Anniversary и Address объекты также будут иметь обратную, обратную связь; по умолчанию он будет называться person_set, но вы можете настроить другое имя, если вам нужно. См. Ниже отношения "назад" в документации по запросам.