如何使用 on_delete 属性在用户模型的外键字段中设置用户全名?
How can I set user full name in foreignkey field with User Model using on_delete attribute?
我在 django 中有一个模型,它具有带用户模型的外键。
class News(models.Model):
user = models.ForeignKey(AUTH_USER_MODEL, on_delete=models.SET(???))
message - models.TextField()
因此,当任何用户帐户从数据库中删除时,新闻 table 中的条目也会根据用户删除。所以我希望当删除任何用户帐户时,我需要使用 'on_delete=models.SET(???)'
在用户字段中设置 his/her 全名
Example:
如果我有 first_name = 'Neeraj' 和 last_name='Kumar' 的用户
当我想删除那个用户帐户时,然后在新闻中 table 我想保存他的名字。
user
News
模型中的字段映射到 User
模型实例。
您不能将字符串分配给该字段。您只能将 null 分配给 User
模型实例。
您必须提供替代用户来代替已删除的用户。因此,要么保留一个用户进行替换,要么在删除时创建一个。 docs.
里面解释的很清楚
您可以做的一件事是向 News
模型添加一个新的 name
字段,并在创建 News
实例时填充它。
class News(models.Mode):
user = models.ForeignKey(AUTH_USER_MODEL, on_delete=models.SET_NULL)
name = models.CharField()
def save(self, *args, **kwargs):
if not self.id:
self.name = self.user.first_name + self.user.last_name
super(News, self).save(*args, **kwargs)
现在删除User
后,user
字段设置为NULL,name
字段包含所需的名称信息。
与前面的回答一样,您不能将字符串值分配给 ForeignKey 字段。使用这种 on_delete 方法,您可以为特殊用户分配类似 deleted 的内容,在这种情况下。此外,如果您真的想将用户名分配给另一个字段,您可以使用 Django 信号来完成。 on_delete.
无能为力
from django.conf import settings
from django.contrib.auth import get_user_model
from django.db import models
def get_sentinel_user():
return get_user_model().objects.get_or_create(username='deleted')[0]
class MyModel(models.Model):
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.SET(get_sentinel_user),
)
我在 django 中有一个模型,它具有带用户模型的外键。
class News(models.Model):
user = models.ForeignKey(AUTH_USER_MODEL, on_delete=models.SET(???))
message - models.TextField()
因此,当任何用户帐户从数据库中删除时,新闻 table 中的条目也会根据用户删除。所以我希望当删除任何用户帐户时,我需要使用 'on_delete=models.SET(???)'
Example:
如果我有 first_name = 'Neeraj' 和 last_name='Kumar' 的用户 当我想删除那个用户帐户时,然后在新闻中 table 我想保存他的名字。
user
News
模型中的字段映射到 User
模型实例。
您不能将字符串分配给该字段。您只能将 null 分配给 User
模型实例。
您必须提供替代用户来代替已删除的用户。因此,要么保留一个用户进行替换,要么在删除时创建一个。 docs.
里面解释的很清楚您可以做的一件事是向 News
模型添加一个新的 name
字段,并在创建 News
实例时填充它。
class News(models.Mode):
user = models.ForeignKey(AUTH_USER_MODEL, on_delete=models.SET_NULL)
name = models.CharField()
def save(self, *args, **kwargs):
if not self.id:
self.name = self.user.first_name + self.user.last_name
super(News, self).save(*args, **kwargs)
现在删除User
后,user
字段设置为NULL,name
字段包含所需的名称信息。
与前面的回答一样,您不能将字符串值分配给 ForeignKey 字段。使用这种 on_delete 方法,您可以为特殊用户分配类似 deleted 的内容,在这种情况下。此外,如果您真的想将用户名分配给另一个字段,您可以使用 Django 信号来完成。 on_delete.
无能为力from django.conf import settings
from django.contrib.auth import get_user_model
from django.db import models
def get_sentinel_user():
return get_user_model().objects.get_or_create(username='deleted')[0]
class MyModel(models.Model):
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.SET(get_sentinel_user),
)