我有3个模型:Document,MetaData,MetaDataValue和一个“连接器表”DocumentMetaDataValue。我想在一个管理页面上添加文档和所有相关的元数据值。
models.py:
# MetaData
class MetaData(models.Model):
metadata_id = models.AutoField(primary_key = True)
name = models.CharField('metadata name', max_length=200, unique=True)
description = models.TextField('description')
def __str__(self):
return self.name
# MetaData Value
class MetaDataValue(models.Model):
metadata_id = models.ForeignKey(MetaData, on_delete=models.CASCADE,)
value = models.CharField('value', max_length=200, unique=True)
def __str__(self):
return self.value
# Document
class Document(models.Model):
document_id = models.AutoField(primary_key=True)
metadata = models.ManyToManyField('MetaData', through='DocumentMetaDataValue', through_fields=('document', 'metadata'))
metadatavalue = models.ManyToManyField('MetaDataValue', through='DocumentMetaDataValue', through_fields=('document', 'metadataValue'))
class DocumentMetaDataValue(models.Model):
document = models.ForeignKey(Document, on_delete=models.CASCADE)
metadata = models.ForeignKey(MetaData, on_delete=models.CASCADE)
metadataValue = models.ForeignKey(MetaDataValue, on_delete=models.CASCADE)
admin.py:
class Fred(forms.ModelForm):
""" something newer
"""
class Meta:
model = DocumentMetaDataValue
fields = '__all__'
class DocumentMetaDataValueInline(admin.TabularInline):
model = DocumentMetaDataValue
form = Fred
class DocumentAdmin(admin.ModelAdmin):
form = DocumentForm
list_display = ('get_document_type', 'document_state', 'title', 'description', 'original_file_name', 'created', 'storage_file_name', 'get_thumb', )
ordering = ('created',)
readonly_field = ('document_state',)
filter_horizontal = ('metadata', 'metadatavalue', )
inlines = (DocumentMetaDataValueInline, )
# other code not related to this problem
admin.site.register(Document, DocumentAdmin)
有16个以上的元数据名称,每个名称都有一个或多个元数据值。例如,元数据名称Person有23个值('Bob','Sam','Sally'等),元数据名称Decade有12个值(1890,1900,1910,1920等)。文档可以具有与其关联的一个或多个元数据名称,并且该元数据名称的一个或多个元数据值可以与该文档相关联。例如,文档可以是包含两个人的照片。 Decade的元数据值可以是1910年,Person的元数据值可以是Sam和Sally。
在内联的每一行上,我想显示与下拉列表相对应的元数据名称以及相关的元数据值。应该能够为特定元数据名称选择多个元数据值。
上面代码中发生的情况是内联的每一行都有两个下拉列表 - 第一个是所有元数据名称,第二个是所有元数据值。
我想将第一个下拉列表更改为元数据名称的单个字符串,第二个下拉列表仍然是下拉列表,但只是该元数据名称的值。我不知道如何做出这些改变。
谢谢!
标记