Django模型继承 - 只需要查询中父类的实例

时间:2012-08-07 20:44:52

标签: python django django-models django-queryset

假设我有两个模型,一个是另一个模型的父模型。如何查询Django中不是餐馆的所有地方? Place.objects.all()会包括所有餐馆吗?我想从结果中排除孩子。谢谢!

class Place(models.Model):
    name = models.CharField(max_length=50)
    address = models.CharField(max_length=80)

class Restaurant(Place):
    serves_hot_dogs = models.BooleanField()
    serves_pizza = models.BooleanField()

3 个答案:

答案 0 :(得分:9)

过滤Django自动创建的OneToOneField。如果是IS NULL,则此Place不是Restaurant

non_restaurant_places = Place.objects.filter(restaurant__isnull=True)

答案 1 :(得分:2)

According to the documentation,您可以检查是否存在小写型号名称作为属性:

places = Place.objects.all()
not_restaurants = [p for p in places if not hasattr(p, 'restaurant')]

答案 2 :(得分:1)

简单的方法是在place_type模型上设置Place属性,然后覆盖savePlace和任何其他基类的Restaurant当它持续存在时正确设置它。然后,您可以使用Place.objects.filter(place_type='PLACE')进行查询。可能还有其他方法,但它们可能很快变得非常毛茸茸。