Django 一对多模型
下面的模型描述了一种漏洞以及互联网上提到该漏洞的链接。假设每个链接只讨论一个漏洞,而且很多链接都会提到这个漏洞。这样设计模型是否正确呢?
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)
管理应用程序提供了一个“选择”框来显示参考链接,但这并不是我想要的。当我添加一个新的漏洞对象时,所有已经输入的链接都会出现在下拉框中,这感觉很不自然。我觉得这应该和博客评论的行为很相似,也就是说,评论只适用于一个特定的博客文章,而不是其他文章,并且一篇博客文章可以有很多评论。我该如何在Django模型中表达这个想法呢?
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)
如果你说每个网址都在讲一个特定的漏洞,那在Django数据库模型里就有你的关系了 :)
至于供应商字段,你只需要再加一个类,就像Vuln类那样。例如:
class Vendor(models.Model):
field_names_go_here = models.TextField(max_length=70)
short_description = models.CharField("Description", max_length=70)
希望这能帮到你!
祝好,Alex