我正在编写一个网络刮刀来获取有关客户的信息以及访问它们的预约时间。我有一个名为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
我的刮刀非常适合作为一个独立的应用程序,为每个数据页面生成一个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模型,理论上如果你知道你有哪些字段类型就可以,并且从那个代码中你就没有真正拥有这些信息。
你需要做的是定义一个像https://docs.djangoproject.com/en/2.1/topics/db/models/中举例说明的Django模型。
基本上你必须在项目应用程序的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默认为所有模型创建一个。