Django一对多模型

2024-05-21 03:40:12 发布

您现在位置:Python中文网/ 问答频道 /正文

以下模型描述了一个漏洞以及internet上引用该漏洞的URL。假设每个URL只讨论一个漏洞,并且许多URL将讨论该漏洞。这是布置模型的正确方法吗?

class Vuln(models.Model):
  pub_date = models.DateTimeField("Publication Date")
  short_description = models.CharField("Description", max_length=70)

  reference_urls = models.ForeignKey(Url, unique=True, blank=True, verbose_name="Reference URLs")
  vendor = models.ForeignKey(Vendor, verbose_name="Vendor")

class Url(models.Model):
  url = models.URLField("URL", max_length=200)

管理应用程序为引用url提供了一个“选择”框,这不是我想要的。当我添加一个新的漏洞对象时,所有已输入的现有URL都会显示在该下拉列表中,这也是不自然的。我觉得这应该表现得非常类似于一个博客评论,即评论适用于一个博客条目,而不是其他,一个博客条目可能有许多评论。我如何在Django模型中表达这一点?


Tags: name模型trueurlverbosemodelmodels评论
1条回答
网友
1楼 · 发布于 2024-05-21 03:40:12

应该更像这样:

class Vuln(models.Model): 
  pub_date = models.DateTimeField("Publication Date") 
  short_description = models.CharField("Description", max_length=70)
  vendor = models.ForeignKey(Vendor, verbose_name="Vendor") 

class Url(models.Model): 
  url = models.URLField("URL", max_length=200)
  vulnerability = models.ForeignKey(Vuln)

如果您说每个Url都谈到一个特定的漏洞,那么Django DBM中就有您的关系:)

至于vendor字段,您只需添加另一个类,非常类似于类Vuln。例如:

class Vendor(models.Model): 
  field_names_go_here = models.TextField(max_length=70)
  short_description = models.CharField("Description", max_length=70)

希望这有帮助! 你好,亚历克斯

相关问题 更多 >