Несколько ссылок на одну и ту же модель в другой модели в Django - PullRequest
0 голосов
/ 21 июня 2011

Привет, у меня в системе много пользователей, которые подразделяются на разные типы.Я хочу хранить детали адреса всех этих пользователей.Например, пользователь может быть студентом, школой или франчайзи.Все пользователи здесь могут иметь адресную информацию, связанную с ними.

from django.db import models
from django.contrib.auth.Models import User

class Address(models.Model):
    user = models.OneToOneField(User)
    address = models.TextField()

class Student(models.Model):
    user_id = models.ForeignKey(User)
    address = models.ForeignKey(Address)

class School(models.Model):
    user_id = models.ForeignKey(User)
    address = models.ForeignKey(Address)
    contact_person_name = models.CharField(max_length=50)

В этом сценарии есть 2 ссылки на модель User - одну через user_id и другую через address.user, хотя они должны ссылаться натот же экземпляр.Плохо ли иметь дубликаты ссылок?

Я думал о том, чтобы пропустить чужую «пользовательскую» клавишу в Address, но я думаю, что адрес не может существовать без пользователя.Как лучше смоделировать это?

1 Ответ

1 голос
/ 21 июня 2011

Как вы уже упоминали в вопросе, дублирование одного и того же поля в модели не является хорошей идеей.

Если это ваши реальные модели, я бы предложил вам использовать абстрактные модели :

from django.db import models
from django.contrib.auth.Models import User

class Profile(models.Model):
    user = models.OneToOneField(User, related_name="%(app_label)s_%(class)s_related")
    address = models.TextField()

    class Meta:
        abstract = True

class Student(Profile):
    pass

class School(Profile):
    contact_person_name = models.CharField(max_length=50)

При этом будут созданы две таблицы: учащиеся, школы с полями user, address и user, address, contact_person_name соответственно.

...