Django一对多模型

Dan*_*Dan 11 python django model one-to-many

以下模型描述了漏洞以及引用该漏洞的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)
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*lex 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)
Run Code Online (Sandbox Code Playgroud)

如果你说每个Url谈论一个特定的漏洞,那么你在Django DBM中有你的关系:)

至于供应商字段,您只需添加另一个类,就像Class Vuln一样.例如:

class Vendor(models.Model): 
  field_names_go_here = models.TextField(max_length=70)
  short_description = models.CharField("Description", max_length=70)
Run Code Online (Sandbox Code Playgroud)

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