基于类别的Django模型继承和访问子级

基于类别的Django模型继承和访问子级,django,python-2.7,django-models,Django,Python 2.7,Django Models,我想获取父类值和每个子类值?如何识别要获取的子对象 我有这样的Django模型结构 class Category(models.Model): name = models.CharField(max_length=80) class Place(models.Model): name = models.CharField(max_length=50) address = models.CharField(max_length=80) category = mo

我想获取父类值和每个子类值?如何识别要获取的子对象

我有这样的Django模型结构

class Category(models.Model):
    name = models.CharField(max_length=80)


class Place(models.Model):
    name = models.CharField(max_length=50)
    address = models.CharField(max_length=80)
    category = models.ForeignKey('Category')


class PizzaRestaurant(Place):
    serves_hot_dogs = models.BooleanField(default=False)
    serves_pizza = models.BooleanField(default=False)


class PastaRestaurant(Place):
    extra = models.CharField(max_length=80)
当我们进行操作时,我们可以像下面这样保存对象。正如我所料,它保存到了数据库中。位置表中的两个条目和每个子对象表中的每个条目

a = Category()
a.name = "pasta"

b = Category()
b.name = "pizza"

a.save()
b.save()

x = PastaRestaurant()
x.address = "Pasta Address"
x.name = "Pastamonia"
x.extra = "some extra"
x.category = a

y = PizzaRestaurant()
y.address = "Pizza Address"
y.name = "Dominos"
y.serves_hot_dogs = 1
y.serves_pizza = 0
y.category = b

x.save()
y.save()
现在我需要像这样访问

p = Place.objects.get(id=1)
我如何知道哪些对象/属性属于place对象? 因此,当我获取具有公共属性的位置时,应该能够获得相应的子对象值


或者我需要的任何其他模型设计工作?

如果您想访问子模型的属性,您需要将其作为该模型获取,即
比萨餐厅
PastaRestaurant
,否则您将只获得一个
位置
对象

如果您需要获取所有位置,而不考虑子类,请查看
django模型utils
。使用它,您可以实现重载操作以执行特定于子类的操作。

做得很好,提高了处理模型继承的能力,如下所示:

从polymorphic.models导入PolymorphicModel

class Place(PolymorphicModel):
    ...

class PizzaRestaurant(Place):
    ...

class PastaRestaurant(Place:
    ...


>>> some_place = Place.objects.create(name="Walmart")
>>> some_pizza_place = PizzaRestaurant.objects.create(name="Slice King", address="101 Main St., Bismarck, ND", category = Category.objects.first(),serves_pizza=True)
>>> some_pizza_place.instance_of(PizzaPlace)
True
>>> PizzaRestaurant.objects.all()
queryset<['Slice King',]>
>>> Place.objects.all()
queryset<['Walmart', 'Slice King',]>
上课地点(多态模型):
...
等级比萨饼餐厅(地点):
...
等级PastaRestaurant(地点:
...
>>>some_place=place.objects.create(name=“沃尔玛”)
>>>some_pizza_place=PizzaRestaurant.objects.create(name=“Slice King”,address=“101 Main St.,Bismarck,ND”,category=category.objects.first(),serves_pizza=True)
>>>一些比萨店。例如(比萨店)
真的
>>>PizzaRestaurant.objects.all()
queryset
>>>Place.objects.all()
queryset

django model utils支持django 1.4到1.9。它不适用于当前版本1.10?对于django的新版本,我们不知道这是可行的?我在1.10中使用它时没有问题。django rest框架和序列化程序如何支持这一点?