Если мы настроим профиль, который рекомендует Django:
class Profile(models.Model):
user = models.ForeignKey(User, unique=True)
Затем, когда вы удаляете объект User
из администратора Django, он также удаляет свой профиль. Это связано с тем, что профиль имеет внешний ключ для пользователя и он хочет защитить ссылочную целостность. Тем не менее, я хочу эту функциональность, даже если указатель идет в другую сторону. Например, в моем классе Profile
у меня есть:
shipper = models.ForeignKey(Shipper, unique=True, blank=True, null=True)
carrier = models.ForeignKey(Carrier, unique=True, blank=True, null=True)
affiliat = models.ForeignKey(Affiliate, unique=True, blank=True, null=True, verbose_name='Affiliate')
И я хочу, чтобы, если вы удалите Profile
, он удалит связанные объекты отправителя/перевозчика/партнера (не спрашивайте меня, почему Django сделал "affiliate" какое-то странное ключевое слово). Поскольку грузоотправители, перевозчики и ветки являются типами пользователей, и им не имеет смысла существовать без остальной части данных (никто не сможет войти в систему как один).
Причина, по которой я не клал ключи на другие объекты, заключается в том, что тогда Django пришлось бы внутренне присоединяться ко всем этим таблицам каждый раз, когда я хотел бы проверить, какой тип пользователя был...