我有这些课程 -
class DocumentType(models.Model):
type_id = models.AutoField(primary_key=True)
name = models.CharField('type name', max_length=200)
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')
class DocumentTypeMetaData(models.Model):
documentType_id = models.ManyToManyField(DocumentType,)
metadata_id = models.ManyToManyField(MetaData,)
required = models.BooleanField(default=False)
例如,DocumentType值为“Photo”的所需元数据为“Decade”和“Orientation”。
在DocumentTypeMetaData类中,我希望有一个def __str__(self)
函数,它在管理页面中返回如下内容 -
Photo: (Decade, Photo Type) required
格式并不重要,我只想知道哪些元数据是必需的。目前,所有显示的都是
DocumentTypeMetaData object
在管理页面上。
我正在努力解决如何编写此函数的查询。
谢谢!
标记
答案 0 :(得分:0)
这些关系不对。多对多关系是DocumentType和MetaData之间的关系; DocumentTypeMetaData是直通表。所以:
class DocumentType(models.Model):
type_id = models.AutoField(primary_key=True)
name = models.CharField('type name', max_length=200)
metadata = models.ManyToManyField('MetaData', through='DocumentTypeMetaData')
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')
class DocumentTypeMetaData(models.Model):
document_type = models.ForeignKey(DocumentType)
metadata = models.ForeignKey(MetaData)
required = models.BooleanField(default=False)
def __str__(self):
return '{} {} {}'.format(self.document_type, self.metadata, self.required)