Django admin link 位于列表中另一个用户模型
Django admin link at user model from another in list
在我的 Django 管理员中,我有一个 link 给用户的模型,我会在我的列表中创建一个 link 以直接从连接的模型传递到相关的用户 ID 编辑页面,我这样做:
class a_cards(models.Model):
CK_CHOICES = (
('A', 'Ambassador'),
('M', 'Medico'),
('P', 'Paziente'),
('S', 'Senator'),
)
c_num = models.CharField(max_length=200, unique=True,
null=True, blank=True, verbose_name="Numero card")
c_data = models.DateTimeField(auto_now=True)
c_type = models.CharField(
max_length=1, choices=CK_CHOICES, verbose_name="Tipo utenza")
c_email = models.CharField(max_length=200, unique=True,
null=True, blank=True, verbose_name="Notifica Email")
c_agente = models.ForeignKey(AgenteProfile, on_delete=models.CASCADE,
null=True, blank=True, related_name="ag_id", verbose_name="Agente")
c_user = models.OneToOneField(User, null=True, blank=True, on_delete=models.CASCADE, verbose_name="Cliente" )
class Meta:
verbose_name = 'Cards'
verbose_name_plural = 'Cards'
def user_link(self):
if self.c_user:
return '<a href="%s">%s</a>' % (reverse("admin:auth_user_change", args=(self.c_user.id,)) , escape(self.c_user))
user_link.allow_tags = True
user_link.short_description = "User"
def __str__(self):
return self.c_num
在管理员中:
class cardAdmin(ImportExportModelAdmin):
list_filter = ('c_type',)
list_display = ('c_num', 'c_data', 'c_type', 'c_agente', 'user_link',)
...
但是当我打开我的管理页面时,我看到了正确的 link 但不是 libk 形式:
哪里出错了?
为什么我不能点击 link?
非常感谢
您应该使用 format_html
构建 HTML 内容。所以重构你的 url 生成器方法,比如;
class a_cards(models.Model):
....
def user_link(self):
if self.c_user:
return format_html('<a href="{url}">{text}</a>', url=reverse("admin:auth_user_change", args=(self.c_user.id,)), text=self.c_user)
return "-"
user_link.short_description = "User"
user_link.allow_tags = True
来自文档;
All args and kwargs are passed through conditional_escape() before being passed to str.format().
所以你不需要指定额外的 escape()
.
在我的 Django 管理员中,我有一个 link 给用户的模型,我会在我的列表中创建一个 link 以直接从连接的模型传递到相关的用户 ID 编辑页面,我这样做:
class a_cards(models.Model):
CK_CHOICES = (
('A', 'Ambassador'),
('M', 'Medico'),
('P', 'Paziente'),
('S', 'Senator'),
)
c_num = models.CharField(max_length=200, unique=True,
null=True, blank=True, verbose_name="Numero card")
c_data = models.DateTimeField(auto_now=True)
c_type = models.CharField(
max_length=1, choices=CK_CHOICES, verbose_name="Tipo utenza")
c_email = models.CharField(max_length=200, unique=True,
null=True, blank=True, verbose_name="Notifica Email")
c_agente = models.ForeignKey(AgenteProfile, on_delete=models.CASCADE,
null=True, blank=True, related_name="ag_id", verbose_name="Agente")
c_user = models.OneToOneField(User, null=True, blank=True, on_delete=models.CASCADE, verbose_name="Cliente" )
class Meta:
verbose_name = 'Cards'
verbose_name_plural = 'Cards'
def user_link(self):
if self.c_user:
return '<a href="%s">%s</a>' % (reverse("admin:auth_user_change", args=(self.c_user.id,)) , escape(self.c_user))
user_link.allow_tags = True
user_link.short_description = "User"
def __str__(self):
return self.c_num
在管理员中:
class cardAdmin(ImportExportModelAdmin):
list_filter = ('c_type',)
list_display = ('c_num', 'c_data', 'c_type', 'c_agente', 'user_link',)
...
但是当我打开我的管理页面时,我看到了正确的 link 但不是 libk 形式:
哪里出错了? 为什么我不能点击 link?
非常感谢
您应该使用 format_html
构建 HTML 内容。所以重构你的 url 生成器方法,比如;
class a_cards(models.Model):
....
def user_link(self):
if self.c_user:
return format_html('<a href="{url}">{text}</a>', url=reverse("admin:auth_user_change", args=(self.c_user.id,)), text=self.c_user)
return "-"
user_link.short_description = "User"
user_link.allow_tags = True
来自文档;
All args and kwargs are passed through conditional_escape() before being passed to str.format().
所以你不需要指定额外的 escape()
.