python - 如何将现有的 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")
我真正想知道的是我在正确的路线上吗?或者(更有可能)这种方法有多错误?我知道这里一定有很多东西不见了,但我不知道是什么。
解决方案
通过映射,我假设您想自动生成一个可以在数据库中迁移的 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 默认为所有模型创建一个。
推荐阅读
- javascript - 如何使用 data-attr 在选择框中创建锚点
- c# - 读取具有不同编码的多个文件,保留所有字符
- angular - Angular PrimeNG p-chartchartsjs 未显示
- angular - 在 c3.generate 方法上设置 data.id
- java - OpenJFX / JavaFX 16 WebView 无法使用 WebGL 显示简单的网页
- flutter - 如何使用 Flutter 通过 NFC 在两台设备之间交换数据和文件?
- r - 重复测量的 R 线图,线粗反映观察次数
- terraform - 使用 Terraform 将 `configMap` 应用到 EKS 集群
- bash - Bash 脚本将多行排序为一个块
- airflow - 将新的 DAG 添加到气流调度程序