11

以下模型描述了一个漏洞以及 Internet 上引用该漏洞的 URL。假设每个 URL 只讨论 1 个漏洞,并且许多 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)

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

4

1 回答 1

23

它应该更像这样:

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 字段,您只需添加另一个类,就像 Class Vuln 一样。例如:

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

希望这可以帮助!问候,亚历克斯

于 2010-01-11T04:51:49.343 回答