django - 对象创建根据基本模型字段分配代理类
问题描述
我希望能够使用基本模型创建对象,但根据对象的字段将该对象实际创建为代理类。
例如,对于以下模型:
class Animal(models.Model):
species = models.CharField()
class Cat(Animal):
class Meta:
proxy = True
class Dog(Animal):
class Meta:
proxy = True
我该如何设置它以便
cat = Animal.objects.create(species="cat")
dog = Animal.objects.create(species="dog")
Animal.objects.all() # Returns queryset of [cat, dog]
Cat.objects.all() # Returns queryset of [cat]
Dog.objects.all() # Returns queryset of [dog]
编辑:我会对这两种类型的解决方案感兴趣:
a)首先创建对象,Animal
然后转换为代理类
b) 对象直接创建为代理类
(不幸的是,解决方案类型 A 可能与我的用例最相关)
解决方案
您应该为每个代理创建一个自定义管理器。
class Animal(models.Model):
species = models.CharField()
class CatManager(models.Manager):
def get_queryset(self):
return super().get_queryset().filter(species='cat')
class DogManager(models.Manager):
def get_queryset(self):
return super().get_queryset().filter(species='dog')
class Cat(Animal):
objects = CatManager()
class Meta:
proxy = True
class Dog(Animal):
objects = DogManager()
class Meta:
proxy = True
推荐阅读
- windows - 远程执行时短 LdrLoadDll 存根崩溃
- python - 如何在 Django 模型的 `dict` 中生成`dict`,也许是`dict`?
- php - PHP 包含相对路径 - 说明
- sql - 填充 ssis 输入源列以避免截断错误?
- python - 如何将数据框中的值转换为值
- javascript - Javascript更改导航的CSS属性背景(materializeCSS)
- c# - NettopologySuite 和 Dotspatial WKTReader
- haproxy - 是否可以将 cookie 的散列值写入 haproxy 的标头?
- python - 嵌套字典字段中的前夕 0.8 `allow_unknown`
- matlab - 制作一个对数字中的数字求和的函数