Как задать пользовательский текст для функции django on_delete?
У меня есть модель с именем 'Клиенты' и другая модель с именем 'Информация'.
class Information(models.Model):
client_name = models.ForeignKey(Clients, on_delete=models.SET(get_deleted_client_intance))
Я хочу установить пользовательский текст, когда имя удаляется из модели 'Clients'.
Нижеприведенная функция создает новое имя 'deleted' как новую запись и сохраняется в модели 'Clients'. Я не хочу этого. Я хочу, чтобы при удалении имени на его месте было написано 'deleted' или 'removed'.
def get_deleted_client_intance():
return Clients.objects.get_or_create(name='deleted')[0]
Как я могу это сделать?
Мне кажется, вы немного неправильно понимаете аргумент ключевого слова on_delete
. Согласно документации:
Когда объект, на который ссылается ForeignKey, удаляется, Django будет эмулировать поведение SQL-ограничения, указанного аргументом on_delete. Например, если у вас есть nullable ForeignKey и вы хотите, чтобы он устанавливался равным null, когда объект, на который ссылается ForeignKey, удаляется:
user = models.ForeignKey( User, on_delete=models.SET_NULL, blank=True, null=True, )
Т.е. он обрабатывает некоторую логику при удалении ссылающегося объекта - устанавливает поле как null (SET_NULL), ограничивает удаление, если ссылающийся объект имеет дочерние объекты (PROTECT), удаляет и дочерние объекты (CASCADE), или устанавливает предпочтительное значение (SET) и т.д.
В вашем случае, если вы хотите изменить состояние объекта Clients
, не нужно делать это в callable, передаваемом в models.SET
, лучше сделать это на уровне объекта, например, переопределить метод delete
:
class Clients(models.Model):
...
def delete(self, using, *args, **kwargs):
self.name = 'deleted'
self.save(using=using)