11

次のモデルは、脆弱性と、その脆弱性を参照するインターネット上の 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)

管理アプリケーションには参照 URL の「選択」ボックスが表示されますが、これは私が望んでいるものではありません。新しい脆弱性オブジェクトを追加すると、入力された既存の URL がすべてドロップダウンに表示されますが、これも不自然です。これは、ブログのコメントと非常によく似た動作をするはずだと思います。コメントは 1 つのブログ エントリにのみ適用され、1 つのブログ エントリには多くのコメントが含まれる場合があります。これを 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 に答える