Могу ли я получить поля 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.

Вернуться на верх