Модели Django One-to-Many
Следующие модели описывают уязвимость и 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)
Приложение Admin предоставляет поле выбора для ссылочных URL-адресов, чего я не хочу. Когда я добавляю новый объект уязвимости, все существующие URL-адреса, которые были введены, отображаются в этом выпадающем списке, что опять-таки неестественно. Я чувствую, что это должно вести себя очень похоже на то, как комментарий в блоге, т.е. комментарий относится к одной записи в блоге, и никто другой, и что одна запись в блоге может иметь много комментариев. Как это выразить в модели Django?
Ответы
Ответ 1
Это должно быть примерно так:
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 есть ваше отношение:)
Что касается поля поставщика, вы просто добавляете еще один класс, как Class Vuln. Например:
class Vendor(models.Model):
field_names_go_here = models.TextField(max_length=70)
short_description = models.CharField("Description", max_length=70)
Надеюсь, это поможет!
С уважением, Алекс