Я только что начал в Python и Django, и я пытаюсь сделать что-то довольно простое, но после многих часов поиска я не нашел ответа, поэтому здесь на него приходит мой вопрос:Как установить нулевую ссылку на ForeignKey - Django
У меня есть модели: User (CustomUser) и House.
Я хочу иметь поле в User, которое ссылается на Дом, и которое может быть необязательным, подражая факту, что человек может находиться внутри (когда ссылка прилагается) или снаружи (когда это пустой) дом. В модели House я хочу иметь также «список» людей (пользователей), которые находятся в данный момент в доме.
Для достижения этой цели, я сделал что-то вроде этого:
class User(AbstractBaseUser):
# other attrs ...
# (ForeignKey) house: House where the user is right now
house = models.ForeignKey(House,
verbose_name='where is the user right now',
related_name='house_now', blank=True, null=True,
on_delete=models.SET_NULL
)
def leaveHouse(self):
house = self.house.delete()
class House(models.Model):
# (ManyToManyField) people: List of Users that are currently within the house
people = models.ManyToManyField(settings.AUTH_USER_MODEL,
verbose_name='people inside the house right now',
related_name='people',
blank=True
)
def removeUser(self, user):
self.people.remove(user)
Проблема заключается в том, что, когда я использую функцию leaveHouse модели пользователя, вместо установки ForeignKey в Null или Empty, он удаляет объект Дома, на который ссылается ключ.
Любое предложение о том, что я делаю неправильно, лучшие практики и такие вещи, пожалуйста?
Заранее благодарен!
EDIT:
Во всяком случае, только немного вопрос, связанный с этим. Почему в администраторе django, если я установил поле «house» как «----» (None), отлично работает, но если я установил поле «home» как «----», то дал мне «'NoneType' объект не имеет атрибута 'рк'»
# (ForeignKey) home: Main house
home = models.ForeignKey(House,
verbose_name='default house',
related_name='home', blank=True, null=True,
on_delete=models.SET_NULL
)
Oopss .. Спасибо Вам! Я попытался установить его в None, но ничего не знал о спасении. self.save() сохраняет состояние объекта тогда? P.S: @alecxe Прочтите редактирование в главном вопросе, пожалуйста :) –
@ GuillermoLópez хорошо, что, если вы удалите это 'on_delete = models.SET_NULL' часть? Разве это имеет значение? Благодарю. – alecxe
Выяснил это. < Имел функцию в той же модели, которая пыталась получить доступ к этому полю, и я не делал правильных проверок, когда это None. В любом случае спасибо –