如何将现有的python类映射到Django模型

时间:2018-12-15 20:55:01

标签: 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")

我真正想知道的是我在正确的位置吗?或者(更有可能)这种方法有多错误? 我知道这里肯定会遗漏很多东西,但我无法解决。

1 个答案:

答案 0 :(得分:1)

通过映射,我假设您想自动生成一个可以在数据库中迁移的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)
    self.appointment = models.DateTimeField()
    self.notes = models.CharField(max_length=250)
    self.folder = models.CharField(max_length=250)
    self.specific_reqs = models.CharField(max_length=250)
    self.system_notes = models.CharField(max_length=250)

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

弄清楚这些内容之后,您可以进行Job.objects.create(...yourdata)

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