我想获取每个子值的父类值?如何识别要获取的子对象?
我有像这样的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)
当我们进行操作时,我们可以保存下面的对象。它像我预期的那样保存到数据库中。 Place表中的两个条目以及每个子对象表中的每个条目。
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)
我怎么知道哪些对象/属性属于地方对象? 因此,当我获取具有公共属性的位置时,也应该能够获得相应的子对象值。
或者其他任何模型设计都能满足我的需求吗?
答案 0 :(得分:1)
如果您想访问子模型的属性,则需要将其作为该模型获取,即PizzaRestaurant
或PastaRestaurant
,否则您只会获得Place
个对象
如果您需要获取所有地方而不考虑子类,请查看django-model-utils
中的InheritanceManager。使用它可以实现重载操作以执行特定于子类的操作。
答案 1 :(得分:1)
django-polymorphic这样做很漂亮,提高了使用模型继承的能力,如下所示:
来自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',]>