Абстрактное наследование базового класса в Django с иностранным ключом - PullRequest
9 голосов
/ 22 октября 2009

Я пытаюсь наследовать модель на моем сайте с поддержкой Django, чтобы придерживаться DRY. Моя цель - использовать абстрактный базовый класс BasicCompany для предоставления общей информации для трех дочерних классов: Butcher, Baker, CandlestickMaker (они расположены в их собственных приложениях под соответствующими именами).

Каждый из дочерних классов нуждается в переменном количестве вещей, таких как адреса электронной почты, номера телефонов, URL-адреса и т. Д., Начиная от 0 и выше. Поэтому я хочу, чтобы между этими классами и компанией, на которую они ссылаются, были отношения многие-к-одному / ForeignKey. Вот примерно то, что я представляю, как выглядит BasicCompany / models.py:

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

class BasicCompany(models.Models)
    owner = models.ForeignKey(User)
    name = models.CharField()
    street_address = models.CharField()
    #etc...

    class Meta:
        abstract = True

class EmailAddress(models.model)
    email = models.EmailField()
    basiccompany = models.ForeignKey(BasicCompany, related_name="email_addresses")

#etc for URLs,  PhoneNumbers, PaymentTypes.

Что я не знаю, как это сделать, это унаследовать EmailAddress, URL, PhoneNumbers (и т. Д.) В дочерние классы. Можно ли это сделать, и если да, то как? Если нет, я был бы признателен за ваши советы по обходным путям.

1 Ответ

6 голосов
/ 22 октября 2009

Я подозреваю, что вам будет лучше использовать общие отношения для ссылок, а не пытаться связать все с базовым классом. Родовые отношения позволяют связать такую ​​модель, как EmailAddress, с любым другим классом, который, как представляется, хорошо подходит для вашего варианта использования.

...