这个问题非常相似(如果不一样):Django query — how to get list of dictionaries with M2M relation? .
我问这个问题只是为了了解自 11 年前以来 djagno 是否有任何改进,包括此功能
我有 M2M 关系:
class RandomObject(models.Model):
name = models.CharField(max_length=50,blank=False)
description = models.TextField(blank=False)
features = models.ManyToManyField('Features',blank=False,db_table='RandomObjectFeatures')
class Features(models.Model):
LIGHTING = "LIT"
SECURE = "SGE"
COVERED ="CVP"
FEATURE_NAME_CHOICES = [
(LIGHTING,"Lighting"),
(SECURE,"Secured Well"),
(COVERED,"Covered"),
]
feature_name = models.CharField(max_length=3,choices=FEATURE_NAME_CHOICES,blank=False,null=True)
def __str__(self):
for code, display_name in self.FEATURE_NAME_CHOICES:
if self.feature_name == code:
return display_name
return self.feature_name
我已经填充了数据库,现在想要查询数据库以便能够在模板中显示随机对象的特征
random_objects_data = random_objects.values('name','features__feature_name')
现在,当我打印此内容时,我得到以下内容:(我已将其截断,因为它很长,但它很重要)
{'name': 'object1', 'features__feature_name': 'SGE'}, {'name': 'object1', 'features__feature_name': 'LIT'},{'name': 'object1', 'features__feature_name': 'CVP'}
这没有帮助,因为创建的对象不在数据库中。我想要得到(或类似的东西):
{'name': 'object1', 'features__feature_name': ['SGE','LIT','CVP']}
这意味着在模板中我可以迭代 features__feature_name 中的每个功能。
谢谢!
最好为
RandomObject
模型创建一个自定义方法来迭代 features
属性。例如。
class RandomObject(models.Model):
name = models.CharField(max_length=50,blank=False)
description = models.TextField(blank=False)
features = models.ManyToManyField('Features')
def features_list(self):
return {
'name': self.name
'features': [feature.feature_name for feature in self.features.all()]
}
然后您可以迭代模板中的模型对象。
{% for feature in random_object.features_list.features %}
{{feature}}
{% endfor %}