python - Django 自定义下拉菜单取决于字段类型
问题描述
我有模型:
class DeepLink(models.Model):
class DeepLinkType(models.TextChoices):
TRACING = ('Tracing', 'Tracing')
BUTTON = ('Button', 'Button')
MODAL = ('Modal', 'Modal')
id = models.UUIDField(primary_key=True, default=uuid4)
type = models.CharField(max_length=7, choices=DeepLinkType.choices, blank=False)
uri = models.UUIDField(blank=False, default=uuid4)
class Meta:
db_table = 'deeplink'
class Button(models.Model):
id = models.UUIDField(primary_key=True, default=uuid4)
text = models.CharField(max_length=500, blank=False)
link = models.CharField(max_length=250, blank=False)
image = models.CharField(max_length=250, blank=True)
class Meta:
db_table = 'button'
class Modal(models.Model):
id = models.UUIDField(primary_key=True, default=uuid4)
image = models.CharField(max_length=250, blank=True)
header = models.CharField(max_length=250, blank=True)
body = models.CharField(max_length=250, blank=True)
class Meta:
db_table = 'modal'
class Tracing(models.Model):
id = models.UUIDField(primary_key=True, default=uuid4)
external = models.BooleanField(blank=True, default=False)
external_link = models.CharField(max_length=250, blank=True)
class Meta:
db_table = 'tracing'
根据选择,我需要uri
在 Django Admin 中的字段下拉列表type
。例如,如果我们选择type
as Button
,则该uri
字段应该是所有可能按钮等的下拉列表。
显然我不能声明uri
为外键,因为它可以引用 3 个表。因此,它现在只是管理员中的一个文本字段。
如何在 Django Admin 中进行这样的动态下拉菜单?
解决方案
这看起来是通用外键的完美用途。一般来说,建议谨慎使用它们,但这是它们的用途。
https://simpleisbetterthancomplex.com/tutorial/2016/10/13/how-to-use-generic-relations.html
推荐阅读
- google-photos - 在 Google Photo API 中上传新照片/视频的通知
- firebase - 确定未注册用户是否首次访问应用程序
- javascript - TypeScript/JavaScript:从自定义上下文菜单项调用函数
- mongodb - 通过 db.runCommand() 进行 MongoDB 聚合:$match by date
- json - 如何用 jq 命令匹配一个 json 值?
- python - 如何使用 elasticsearch 的 SimpleQueryString 函数?
- c - 文件描述符标志和函数
- ibm-mq - DIS QSTATUS 与 DIS CHSTATUS 上的总 CONNAME 值之间的差异
- ruby-on-rails - 仅控制器中的时区设置
- windows - 卸载并重新安装 RabbitMQ 后无法启动 RabbitMq 服务