我试图用pymodm
来创建模型,以尽可能保持代码的干性,但我真的不知道如何使用pymodm
Django能够使用abstract=True
逻辑地构造模型,以帮助保持代码的干性:
# Django
class TimeStampedModel(models.Model):
created = models.DateTimeField(auto_now_add=True)
class Meta:
abstract = True
# Both these models will have a `created`
# field and will create a new instance of each
# model class while being separate tables in the database
class Model1(TimeStampedModel):
pass
class Model2(TimeStampedModel):
pass
但是,同样的使用pymodm
的方式并没有像我期望的那样工作:
# pymodm
class TimeStampedModel(MongoModel):
created = fields.DateTimeField(default=datetime.now)
# Both these models will have a `created` field and will
# create a new instance of each model class but,
# crucially, use the same collection in the database
# (which I don't want)
class Model1(TimeStampedModel):
pass
class Model2(TimeStampedModel):
pass
ThisJIRA ticket建议他们不想在pymodm
中实现abstract
,这对我来说很好——只是我不太明白如何在使用该ticket中建议的mixin时以干巴巴的方式构造代码
目前我最接近的方法是:
# pymodm
class TimeStampedModel(MongoModel):
created = fields.DateTimeField(default=datetime.now)
class Model1(TimeStampedModel):
class Meta:
collection_name = 'model_1'
final = True
class Model2(TimeStampedModel):
class Meta:
collection_name = 'model_2'
final = True
即手动定义Meta上的collection_name
。但这有几个问题-首先,我觉得有点难看(但那可能就是我!)。第二,这并不禁止任何人做TimeStampedModel.objects.create()
和仅仅创建一个文档(只能通过继承实现)
有没有更好的方法来处理这个问题呢
我想要的是能够做Model1.objects.create()
,并为它创建一个名为model_1
的集合。如果我这样做Model2.objects.create()
,我期望一个名为model_2
的集合
当前执行Model1.objects.create()
创建了一个名为time_stamped_model
的集合,我假设这是因为pymodm
处理模型继承的方式非常详细here
目前没有回答
相关问题 更多 >
编程相关推荐