我正在使用Django ModelForm来显示有关硬件文章的信息。一切正常,但是当涉及到 many2many 字段时,默认行为是显示相关模型的每个实例。我只需要显示分配的,例如,如果我的文章 A 与服务器 S 相关,我想只显示 S,而不是包含服务器 A、服务器 B 等的列表......我浏览了官方文档和各种论坛,但我不知道该怎么做。
提前感谢任何帮助。
我现在得到了什么
以下是 models.py 和 forms.py
class ArticleHW(models.Model):
name = models.CharField("Nom", max_length=200)
reference = models.CharField(
"Référence",
max_length=200,
null=True,
blank=True,
default=None
)
version = models.CharField(
"Version",
max_length=200,
blank=True,
null=True,
default=None
)
serie_num = models.CharField(
"Numéro de série",
max_length=200,
blank=True,
null=True
)
armoire_pos = models.CharField(
"Position armoire",
max_length=200,
blank=True,
null=True
)
description = models.TextField(
"Description",
blank=True,
null=True,
default=None
)
date_obs = models.DateField(
"Date d'obsolescence",
blank=True,
null=True
)
parent = models.ManyToManyField(
'self',
blank=True,
default=None,
symmetrical=False,
verbose_name="Hardware parent"
)
HW_comp = models.ManyToManyField(
'self',
blank=True,
default=None,
verbose_name="Hardware compatible"
)
doc_link = models.ManyToManyField(
'ArticleDoc',
blank=True,
default=None,
verbose_name="Lien documentation"
)
equip_link = models.ManyToManyField(
'Equipement',
blank=True,
verbose_name="Lien équipement",
through='QuantiteHW'
)
group = models.ManyToManyField(
'Groupe',
default=3,
symmetrical=False,
verbose_name="Groupe"
)
class HWUploadForm(ModelForm):
class Meta:
model = models.ArticleSW
fields = ['name', 'reference', 'version', 'serie_num', 'group', 'doc_link']
widgets = {
'name' : TextInput(attrs={'readonly':'readonly'}),
'reference': TextInput(attrs={'readonly': 'readonly'}),
'version': TextInput(attrs={'readonly': 'readonly'}),
'serie_num': TextInput(attrs={'readonly': 'readonly'}),
}
您可以使用选项 limit_choices_to
.如何在代码中精确实现它取决于模型ArticleDoc
及其属性。一个例子是:
class ArticleHW(models.Model):
# ...
doc_link = models.ManyToManyField(
'ArticleDoc',
blank=True,
default=None,
verbose_name="Lien documentation",
limit_choices_to={'property': 'value'}
)
# ...
这是官方文档的棉绒: https://docs.djangoproject.com/en/1.11/ref/models/fields/#django.db.models.ManyToManyField.limit_choices_to