Skip to main content
 首页 » 编程设计

python之Django:使用模型继承时如何检查对象类别

2024年08月12日33lvdongjie

这是我的 models.py 应用程序的想法是让不同的对象(餐厅、服务等)具有不同的功能(您可以检查每个模型)。但是当我想获取所有对象 Object.objects.all() 时,我不知道每个对象属于哪个类别。

模型.py:

from django.db import models 
from users.models import ProfileUser 
from django.utils import timezone 
 
# Create your models here. 
 
class City(models.Model): 
    name = models.CharField(max_length=20) 
 
    def __str__(self): 
        return f"{self.name}" 
 
class Object(models.Model): 
    author = models.ForeignKey(ProfileUser, on_delete=models.CASCADE) 
    title = models.CharField(max_length=300) 
    city = models.ForeignKey(City, on_delete=models.CASCADE) 
    address = models.CharField(max_length=300) 
    phone = models.CharField(max_length=20, default='') 
    email = models.CharField(max_length=100, default='') 
    site = models.CharField(max_length=100, default='') 
    facebook = models.CharField(max_length=100, default='') 
    instagram = models.CharField(max_length=100, default='') 
    content = models.TextField() 
    rating = models.IntegerField(default=10) 
    created_date = models.DateTimeField(default=timezone.now) 
    approved_object = models.BooleanField(default=False) 
    admin_seen = models.BooleanField(default=False) 
 
    def __str__(self): 
        return f"{self.title}" 
 
 
class Restaurant(Object): 
    seats = models.IntegerField() 
    bulgarian_kitchen = models.BooleanField(default=False) 
    italian_kitchen = models.BooleanField(default=False) 
    french_kitchen = models.BooleanField(default=False) 
    is_garden = models.BooleanField(default=False) 
    is_playground = models.BooleanField(default=False) 
 
 
class SportFitness(Object): 
    is_fitness_trainer = models.BooleanField(default=False) 
 
 
class CarService(Object): 
    is_parts_clients = models.BooleanField(default=False) 
 
 
class BeautySalon(Object): 
    is_hair_salon = models.BooleanField(default=False) 
    is_laser_epilation = models.BooleanField(default=False) 
 
 
class FastFood(Object): 
    is_pizza = models.BooleanField(default=False) 
    is_duner = models.BooleanField(default=False) 
    is_seats = models.BooleanField(default=False) 
 
 
class CarWash(Object): 
    is_external_cleaning = models.BooleanField(default=False) 
    is_internal_cleaning = models.BooleanField(default=False) 
    is_engine_cleaning = models.BooleanField(default=False) 
 
 
class Fun(Object): 
    is_working_weekend = models.BooleanField(default=False) 
    is_kids_suitable = models.BooleanField(default=False) 
 
 
class Other(Object): 
    is_working_weekend = models.BooleanField(default=False) 
 
 
class Comment(models.Model): 
    object = models.ForeignKey(Object, on_delete=models.CASCADE, related_name='comments') 
    author = models.ForeignKey(ProfileUser, on_delete=models.CASCADE) 
    content = models.TextField() 
    rating = models.TextField() 
    created_date = models.DateTimeField(default=timezone.now) 
 
    def __str__(self): 
        return f"{self.content}" 

请您参考如下方法:

您无法使用对象模型获取类别。 为特定目的创建对象类: 它消除了声明类的某些特征的需要

在这里您可以使用 select_related 或 prefect_related 来获得所需的输出。

或

为了满足您的要求,您可以使用django-polymorphic 获取更多详细信息,您可以refer文档。