Могу ли я получить поля API сторонних производителей в качестве внешнего ключа для моей модели Django?
Это правда, что мы можем создавать отношения внешнего ключа между моделями в Django. Как насчет того, чтобы взять некоторые поля из полей API сторонних разработчиков в качестве внешнего ключа для определенной модели Django?
Вот моя модель Django budiness_process.py
class BusinessImpact(models.Model, ModelWithCreateFromDict):
client = models.ForeignKey(
accounts_models.Client, on_delete=models.CASCADE)
business_process = models.ForeignKey(
BusinessProcess, on_delete=models.CASCADE)
hierarchy = models.CharField(max_length=255)
business_assets = models.CharField(max_length=255)
asset_name = models.CharField(max_length=255)
vendors = models.CharField(max_length=255)
product = models.CharField(max_length=255)
version = models.CharField(max_length=10)
cpe = models.CharField(max_length=255)
asset_type = models.CharField(max_length=10)
asset_categorization = models.CharField(max_length=255)
asset_risk = models.CharField(max_length=50)
_regulations = models.TextField(blank=True)
_geolocation = models.TextField(blank=True)
def __str__(self) -> str:
return self.hierarchy + " - " + self.business_assets
Вот мой serializer.py
class BusinessImpactSerializer(serializers.ModelSerializer):
business_process = BusinessProcessListSerializer()
class Meta:
model = models.BusinessImpact
fields = "__all__"
Вот третья реализация API для получения некоторых из его полей.
@api_view(
["GET"],
)
def cve_summery(request, key):
r = requests.get(
"https://services.nvd.nist.gov/rest/json/cves/1.0?cpeMatchString={}".format(
key)
)
if r.status_code == 200:
result = []
res = r.json().get("result").get("CVE_Items")
for rs in res:
data = {
"VulnID": rs.get("cve").get("CVE_data_meta").get("ID"),
"Summery": rs.get("cve").get("description").get("description_data"),
"exploitabilityScore": rs.get("impact")
.get("baseMetricV2")
.get("exploitabilityScore"),
"severity": rs.get("impact").get("baseMetricV2").get("severity"),
"impactScore": rs.get("impact").get("baseMetricV2").get("impactScore"),
}
result.append(data)
return Response(result)
return Response("error happend", r.status_code)
Итак, я хочу сказать, могу ли я получить "severity": rs.get("impact").get("baseMetricV2").get("severity") как внешний ключ в моей BusinessImpact модели?
Спасибо!
Смысл внешнего ключа заключается в связывании таблиц на уровне БД, поэтому у вас не может быть поля ForeignKey, если данные, поступающие от стороннего API, не хранятся на вашей стороне.
Однако вы можете хранить эту информацию в вашей модели, в обязательном поле, и проверять значение при сохранении экземпляра.
.
Таким образом, вы можете быть уверены, что ключ действителен и может быть использован позже для запроса API.