如何为django on_delete函数设置自定义文本?

发布于 2025-02-10 14:11:09 字数 421 浏览 3 评论 0原文

我有一个名为“客户端”的模型和另一个名为“信息”的模型。

class Information(models.Model):
client_name = models.ForeignKey(Clients, on_delete=models.SET(get_deleted_client_intance))

从“客户端”模型中删除名称时,我想设置自定义文本。

以下功能创建了一个新名称为“删除”作为新条目,并保存在“客户端”模型中。我不要那个。我想要在其位置上删除它的名称“已删除”或“删除”。

def get_deleted_client_intance():
return Clients.objects.get_or_create(name='deleted')[0]

我该怎么做?

I have a model named 'Clients' and another model named 'Information'.

class Information(models.Model):
client_name = models.ForeignKey(Clients, on_delete=models.SET(get_deleted_client_intance))

I want to set a custom text when a name is deleted from 'Clients' model.

The below function creates a new name 'deleted' as a new entry and is saved in 'Clients' model. I don't want that. I want if I delete a name it says 'deleted' or 'removed' on it's place.

def get_deleted_client_intance():
return Clients.objects.get_or_create(name='deleted')[0]

How can I do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

时光清浅 2025-02-17 14:11:09

我认为您对on_delete关键字参数有一些误解。根据文档:

删除了外国键引用的对象时,Django将模拟on_delete参数指定的SQL约束的行为。例如,如果您的外国钥匙不可用,并且希望在删除引用对象时将其设置为null:

  user = models.foreignkey(
   用户,
   on_delete = models.set_null,
   空白= true,
   null = true,
)
 

即,当删除引用对象时,它会处理某些逻辑 - 将字段设置为null(set_null),则限制了是否限制了是否删除是否删除。 级联),或设置您的首选值(set)等。

引用的对象具有子女(protect),删除子对象( 对象您无需在传递给models.set.set的可呼叫中执行此操作,最好在对象级别上执行此操作,例如覆盖delete方法:

class Clients(models.Model):
    ...


    def delete(self, using, *args, **kwargs):
        self.name = 'deleted'
        self.save(using=using)

I think you have a little misunderstanding about on_delete keyword argument. According to the docs:

When an object referenced by a ForeignKey is deleted, Django will emulate the behavior of the SQL constraint specified by the on_delete argument. For example, if you have a nullable ForeignKey and you want it to be set null when the referenced object is deleted:

user = models.ForeignKey(
   User,
   on_delete=models.SET_NULL,
   blank=True,
   null=True,
)

I.e. it handles some logic when a referenced object is deleted - sets the field as null (SET_NULL), restricts from removing if the referenced object has children (PROTECT), deletes the child objects as well (CASCADE), or sets your preferred value (SET), etc.

In your case, if you want to change the state of the Clients object you don't need to do it in the callable passed to models.SET, you'd better do it on the object level, e.g. override the delete method:

class Clients(models.Model):
    ...


    def delete(self, using, *args, **kwargs):
        self.name = 'deleted'
        self.save(using=using)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文