相关疑难解决方法(0)

从Django中的基本模型实例返回代理模型实例的正确方法?

说我有模特:

class Animal(models.Model):
    type = models.CharField(max_length=255)

class Dog(Animal):
    def make_sound(self):
        print "Woof!"
    class Meta:
        proxy = True

class Cat(Animal):
    def make_sound(self):
        print "Meow!"
    class Meta:
        proxy = True
Run Code Online (Sandbox Code Playgroud)

让我们说我想做:

 animals = Animal.objects.all()
 for animal in animals:
     animal.make_sound()
Run Code Online (Sandbox Code Playgroud)

我想找回一系列的Woofs和Meows.很明显,我可以在原始模型中定义一个基于animal_type分叉的make_sound,但每次我添加一个新的动物类型(想象它们在不同的应用程序中)时,我必须进入并编辑make_sound函数.我宁愿只定义代理模型并让它们自己定义行为.据我所知,没有办法返回混合的Cat或Dog实例,但我想也许我可以在主类上定义一个返回cat或dog模型的"get_proxy_model"方法.

当然你可以这样做,并传递类似主键的东西,然后只做Cat.objects.get(pk = passed_in_primary_key).但这意味着对您已经拥有的数据进行额外查询,这似乎是多余的.有没有办法以有效的方式将动物变成猫或狗的实例?做我想做的事的正确方法是什么?

python django proxy-classes django-models

26
推荐指数
3
解决办法
6382
查看次数

标签 统计

django ×1

django-models ×1

proxy-classes ×1

python ×1