Python 如何基于另一个模型的实例在Django中创建一个模型,但已过滤
我是Django新手,我正在寻找一种方法,根据另一个模型的实例在Django中创建一个模型,但经过筛选 我在my models.py中有一个名为Person的表,其中包含名称和角色:Python 如何基于另一个模型的实例在Django中创建一个模型,但已过滤,python,django,django-models,django-admin,Python,Django,Django Models,Django Admin,我是Django新手,我正在寻找一种方法,根据另一个模型的实例在Django中创建一个模型,但经过筛选 我在my models.py中有一个名为Person的表,其中包含名称和角色: class Person(models.Model): id = models.UUIDField(primary_key=True) name = models.CharField(max_length=100) role = models.CharField(max_length=100) create
class Person(models.Model):
id = models.UUIDField(primary_key=True)
name = models.CharField(max_length=100)
role = models.CharField(max_length=100)
created_on = models.DateTimeField(auto_now_add=True)
class Meta:
db_table = 'person'
我希望能够在admin.py中调用某个子类,该子类将只显示actors(role=“actors”):
可能吗?或者我必须只与演员再创建一张表吗
我知道我可以使用list\u filter=('role',)
,但这不是我要搜索的,我只需要演员
我认为解决方案是这样的:
class Actor(models.Model):
objects = Person.objects.filter(role='actor')
class Meta:
verbose_name = 'actor'
或
这显然不起作用。您可以为此使用代理模型:
class ActorManager(models.Manager):
def get_queryset(self):
return super().get_queryset().filter(role='actors')
class Actor(Person):
objects = ActorManager()
class Meta:
proxy = True
代理模型只是继承模型(此处为Person)的代理,即不创建新表。在这里,我们创建了一个自定义管理器,以便始终筛选角色。现在只需将此模型注册到管理站点。参考资料:,酷!那很有效,非常感谢!如果我只使用
actors=models.ManyToManyField('Actor',through=FilmWorkPerson)
我会得到一个错误(没有外键)。如果你愿意,我可以再问一个问题,你可以回答:)不要给这个模型做一个外键
,给人做一个外键
,但它会显示所有人,而不仅仅是actors@MStikh看看这个问题。这可能对你有帮助。
class Actor(Person):
self.objects.filter(role='actor')
class Meta:
verbose_name = 'actor'
class ActorManager(models.Manager):
def get_queryset(self):
return super().get_queryset().filter(role='actors')
class Actor(Person):
objects = ActorManager()
class Meta:
proxy = True