Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.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
在Admin add/change视图中自定义Django GenericRelation内容类型值_Django - Fatal编程技术网

在Admin add/change视图中自定义Django GenericRelation内容类型值

在Admin add/change视图中自定义Django GenericRelation内容类型值,django,Django,我的模型正在使用GenericForeignKey和genericorrelations。为了简化,我的模型结构如下: class BaseModel(models.Model): name = models.CharField(max_length=100) model_labels = models.GenericRelation('ModelLabel', related_query_name='%(class)s') model_types = models

我的模型正在使用
GenericForeignKey
genericorrelations
。为了简化,我的模型结构如下:

class BaseModel(models.Model):
     name = models.CharField(max_length=100)
     model_labels = models.GenericRelation('ModelLabel', related_query_name='%(class)s')
     model_types = models.GenericRelation('ModelType'), related_query_name='%(class)s')

     class Meta:
          abstract = True

class ModelA(BaseModel):
     fieldA = models.CharField(max_length = 50)

class ModelB(BaseModel):
     fieldB = models.CharField(max_length = 50)

class ModelLabel(models.Model);
     label = models.CharField(max_length = 50)
     content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
     object_id = models.PositiveIntegerField()
     model_object = GenericForeignKey('content_type', 'object_id')

class ModelType(models.Model):
     type = models.CharField(max_length = 50)
     content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
     object_id = models.PositiveIntegerField()
     model_object = GenericForeignKey('content_type', 'object_id')

class Unrelated(models.Model):
     name = models.CharField(max_lenght = 50)
我面临的问题是
modelabel
ModelType
的管理视图。现在,我得到了3个字段:
标签
类型
内容类型
对象id
。是的,根据模型,这是正确的

但是在
内容类型
中,我得到的不仅仅是
ModelA
ModelB
。我还得到了不相关的,以及不同型号的大多数单个字段。根据:

ContentType的实例表示并存储有关 安装在项目中的模型以及ContentType的新实例 在安装新模型时自动创建

根据这一点,
不相关的
可以出现在值中,但是模型的字段不应该出现。那么它们为什么会出现呢

然而,这并不是我正在努力解决的主要问题。我想将
内容类型
中可供选择的选项列表缩小到
ModelA
ModelB
。从我收集的信息来看,因为这是引擎盖下的
ForeignKey
,我应该可以使用,但我需要使用一些硬编码的
QuerySet
,但我找不到如何制作,例如从字典中。类似的还有
对象id
,我希望能够根据可用的数字选择要使用的值

到目前为止,我意识到我很可能需要扩展
admin.ModelAdmin
视图,也很可能需要创建自定义表单(扩展
forms.ModelForm
)。这也是一种理论,因为到目前为止,我还没有找到一种方法来提到自定义
QuerySet
对象id
。这种方法还有一些缺点,因为如果我选择使用这种方法,我需要为每个模型定制表单(
modelabel
ModelType
)-这真的有必要吗

我知道有一种添加GenericInlineModelAdmin类的方法,但此视图允许添加类型为
ModelLabel
的对象以及
ModelB
。这不包括类型为
ModelB
的对象已经存在的情况

总结一下我想要实现的主要目标:

  • 修复管理员视图以创建
    模型标签
    模型类型
  • 内容类型
    字段的选项列表缩小到
    ModelA
    ModelB
  • 允许用户仅为
    对象id
    字段选择现有id