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

2024-04-28 15:22:29 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

我知道我需要创建一个模型来映射作业类,但这就是我迷路的地方。 从Django文档(https://docs.djangoproject.com/en2.1/howto/custom-model-fields/)可以看出,为了在Django模型中使用我的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")

我真正想知道的是我是不是走对了路线?或者(更有可能)这种方法有多错误? 我知道这里肯定少了一大块东西,但我不知道是什么


Tags: selfclientnoneidinitaddressdefjob
1条回答
网友
1楼 · 发布于 2024-04-28 15:22:29

通过映射,我假设您希望自动生成一个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默认为所有模型创建一个id字段

相关问题 更多 >