Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于Django管理页面中的另一个字段筛选的列表框_Django_Django Admin - Fatal编程技术网

基于Django管理页面中的另一个字段筛选的列表框

基于Django管理页面中的另一个字段筛选的列表框,django,django-admin,Django,Django Admin,我正在Django的一个网站上工作,该网站显示股票市场上的证券信息。它有一个类似这样的模型: class Market(models.Model): name = models.CharField(max_length=255) class Security(models.Model): name = models.CharField(max_length=255) market = models.ForeignKey(Market) class SecurityGr

我正在Django的一个网站上工作,该网站显示股票市场上的证券信息。它有一个类似这样的模型:

class Market(models.Model):
    name = models.CharField(max_length=255)

class Security(models.Model):
    name = models.CharField(max_length=255)
    market = models.ForeignKey(Market)

class SecurityGroup(models.Model):
    name = models.CharField(max_length=255)
    market = models.ForeignKey(Market)
    securities = models.ManyToManyField(Security)
问题是我们的数据库中大约有100个市场,每个市场可以包含500多个证券。在Django管理面板中创建一个新的
SecurityGroup
实例时,显示列表框需要很长时间,因为它可能包含数以万计的项。当创建新的
SecurityGroup
时,我想做的是这样的事情:

  • 用户输入组名并选择市场
  • 证券列表框将被过滤,以仅显示所选市场的证券
  • Django可以这样做吗?

    类似的东西

    class AdminSecurityGroup(admin.ModelAdmin):        
        object = None
        def get_object(self, request, object_id):
           self.object = super(AdminSecurityGroup, self).get_object(request, object_id)
           return self.object
    
        def formfield_for_manytomany(self, db_field, request, **kwargs):
            if db_field.name.lower() == 'securities':
               if self.object and self.object.market:
                  kwargs['queryset'] = Security.objects.filter(market=self.object.market)
               else:
                  kwargs['queryset'] = EmptyQuerySet()
            return super(AdminSecurityGroup, self).formfield_for_manytomany(db_field, request, **kwargs)
    
    你也需要改变

    securities = models.ManyToManyField(Security, blank=True)
    
    并分两步保存模型