我有与此问题中提出的相同的难题,但适用于Django的auth.User.
我有这个代理模型:
class OrderedUser(User):
def __unicode__(self):
return self.get_full_name()
class Meta:
proxy=True
ordering=["first_name", "last_name"]
Run Code Online (Sandbox Code Playgroud)
我的一些其他模型使用的是字段类型OrderedUser而不是django.contrib.auth.models.User字段类型.
在我的视图中,我然后使用request.user填充字段和 - 正如预期 - 得到一个错误:
'Cannot assign "<User...>": <field> must be a "OrderedUser" instance'
Run Code Online (Sandbox Code Playgroud)
我可以做OrderedUser.objects.get(request.user.id),但这对数据库来说是一个额外的打击.
那么,如何将基础模型类转换为其代理类?
我仍然对代理模型与django中的超类之间的关系感到困惑.我现在的问题是如何从已经检索到的超类实例中获取代理模型的实例?
所以,让我说我有:
class Animal(models.Model):
type = models.CharField(max_length=20)
name = models.CharField(max_length=40)
class Dog(Animal):
class Meta:
proxy = True
def make_noise(self):
print "Woof Woof"
Class Cat(Animal):
class Meta:
proxy = True
def make_noise(self):
print "Meow Meow"
animals = Animal.objects.all()
for animal in animals:
if (animal.type == "cat"):
animal_proxy = # make me a cat
elif (animal.type == "dog"):
animal_proxy = # make me a dog
animal_proxy.make_noise()
Run Code Online (Sandbox Code Playgroud)
好.那么......"让我成为一只猫"的内容不需要回溯到数据库,例如:
animal_proxy = Cat.objects.get(id=animal.id)
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法从Animal的一个实例创建一个Cat实例,我知道它是一只猫?