Я читаю ваши модели что вы хотите от своих моделей как:
A department has one to many addresses
A department has one and only one user (as head of department)
A user (through his profile) belongs to one to many departments
A user (through his profile) has one to many addresses
Если это было вашим намерением, это означает, что нет случая, когда у пользователя НЕ будет адреса или отдела, и нет случая, когда у отдела не будет адреса или начальника отдела; тогда я бы сказал, что ваши модели в порядке должны читать:
class Department(models.Model):
name = models.CharField(max_lenght=20)
head_of_department = models.OneToOneField(User)
address = models.ForeignKey(Address)
class UserProfile(models.Model):
user = models.ForeignKey(User, unique=True)
address = models.ForeignKey(Address)
department = models.OneToOneField(Department)
class Address(models.Model):
street_address = models.CharField(max_length=20)
...
class Meta:
abstract = True
class UserAddress(Address):
user_profile = models.ForeignKey(UserProfile)
class DepartmentAddress(Address):
department = models.ForeignKey(Department)
Подробнее о абстрактных классах .
Ваши модели не рассматривают возможности того, что два пользователя будут иметь один и тот же адрес и / или два отдела будут иметь один и тот же адрес. Поскольку вы не указываете уникальное ограничение на адрес (которое я вижу), я предполагаю, что вы в порядке с реальным адресом, который несколько раз отображается в таблице адресов.
Если с тобой все в порядке; хорошо.
Сообщение об ошибке, которое вы получаете, констатирует факт: в Address to Department отсутствует внешний ключ. Вы должны будете вернуть эти отношения, чтобы встроенные функции работали. Это означает, что при редактировании адреса вы можете редактировать любые отделы, связанные с ним; но не наоборот. С моделями, которые я предлагаю выше, вы не должны видеть эту ошибку.
См. Пример из документов . Обратите внимание на то, как Author has many Books
и как много сторон отношений могут быть встроенными.