Ранее я задавал вопросы для этого проекта, касающиеся администратора Django, Inlines, Generics и т. Д. Еще раз спасибо людям, которые предоставили ответы на эти вопросы. Для справки, эти вопросы здесь:
Django - Проектирование отношений модели - Интерфейс администратора и Inline
Общие отношения Django с администратором Django
Тем не менее, я думаю, что мне, вероятно, следует пересмотреть мою модель, чтобы убедиться, что она действительно "правильная". Так что, я думаю, здесь основное внимание уделяется проектированию баз данных.
У нас есть приложение Django с несколькими объектами - Пользователи (у которых есть Профиль пользователя), Больницы, Отделы, Учреждения (то есть Учебные заведения) - у всех из которых есть несколько адресов (или нет адресов). Вполне вероятно, что многие из них будут иметь несколько адресов.
Также возможно, что несколько объектов могут иметь один и тот же адрес, но это редко, и я рад иметь дублирование для тех случаев, когда это происходит.
В настоящее время модель:
class Address(models.Model):
street_address = models.CharField(max_length=50)
suburb = models.CharField(max_length=20)
state = models.CharField(max_length=3, choices=AUSTRALIAN_STATES_CHOICES)
...
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey()
...
class Hospital(models.Model):
name = models.CharField(max_length=20)
address = generic.GenericRelation(Address)
...
class UserProfile(models.Model):
user = models.ForeignKey(User, unique=True)
address = generic.GenericRelation(Address)
...
Во-первых - правильно ли я делаю, с полем FK для каждого объекта, который имеет адрес (а)?
Во-вторых, есть ли лучшая альтернатива использованию Родовых Отношений для этого случая, когда все объекты имеют адреса? В другом посте кто-то упомянул об использовании абстрактных классов - я думал об этом, но там, кажется, есть небольшое дублирование, поскольку модель адресов в основном одинакова для всех.
Кроме того, мы будем активно использовать администратора Django, поэтому он должен работать с этим, предпочтительно также с адресом в виде строк (вот где я столкнулся с проблемой - поскольку я использовал общие отношения, администратор Django был ожидал что-то в полях content_type и object_id и выдавал ошибку, когда они были пустыми, вместо того, чтобы что-то искать).
Ура,
Victor