首页 > 解决方案 > 如何将现有的 python 类映射到 Django 模型

问题描述

我正在编写一个网络爬虫来获取有关客户和访问他们的预约时间的信息。我有一个名为 Job 的类,它存储有关特定工作的所有详细信息。(它的一些属性也是自定义类,例如客户端)。

class Job:

def __init__(self, id_=None, client=Client(None), appointment=Appointment(address=Address(None)), folder=None,
             notes=None, specific_reqs=None, system_notes=None):
    self.id = id_
    self.client = client
    self.appointment = appointment
    self.notes = notes
    self.folder = folder
    self.specific_reqs = specific_reqs
    self.system_notes = system_notes

def set_appointment_date(self, time, time_format):
    pass

def set_appointment_address(self, address, postcode):
    pass

def __str__(self):
    pass

我的刮刀作为一个独立的应用程序非常好用,它为刮取的每一页数据生成一个 Job 实例。我现在想将这些实例保存到 Django 数据库中。

我知道我需要创建一个模型来映射 Job 类,但这就是我迷路的地方。从 Django 文档(https://docs.djangoproject.com/en2.1/howto/custom-model-fields/)中,它说为了在 Django 模型中使用我的 Job 类,我不必在全部。太好了——正是我想要的。但我不知道如何创建一个映射到我的 Job 类的模型。

应该是这样的

from django.db import models
import Job ,Client


class JobField(models.Field):
    description = "Job details"

    def __init__(self, *args, **kwargs):
        kwargs['id_'] = Job.id_
        kwargs['client'] = Client(name=name)
        ...
        super().__init__(*args, **kwargs)


class Job(models.Model):

    job = JobField()

然后我会使用类似的东西创建一个工作

Job.objects.create(id_=10101, name="Joe bloggs")

我真正想知道的是我在正确的路线上吗?或者(更有可能)这种方法有多错误?我知道这里一定有很多东西不见了,但我不知道是什么。

标签: pythondjango

解决方案


通过映射,我假设您想自动生成一个可以在数据库中迁移的 Django 模型,从理论上讲,如果您知道您拥有哪些字段类型,并且从该代码中您实际上并没有该信息,那么这是可能的。

您需要做的是定义一个 Django 模型,如https://docs.djangoproject.com/en/2.1/topics/db/models/中所示。

基本上,您必须在项目应用程序的 models.py 中创建以下类:

from django import models


class Job(models.Model):
    client = models.ForeignKey(to=SomeClientModel)
    appointment = models.DateTimeField()
    notes = models.CharField(max_length=250)
    folder = models.CharField(max_length=250)
    specific_reqs = models.CharField(max_length=250)
    system_notes = models.CharField(max_length=250)

我不知道您实际上拥有哪些数据类型,您必须自己弄清楚并将其交叉引用到https://docs.djangoproject.com/en/2.1/ref/models/fields/#model -字段类型。这只是一个示例,让您了解如何定义它。

弄清楚这些之后,你就可以做Job.objects.create(...yourdata).

您不需要添加 id 字段,因为 Django 默认为所有模型创建一个。


推荐阅读