我使用Django ModelForm来显示有关硬件文章的信息。一切都很顺利,但是当涉及到许多领域时,默认行为是显示相关模型的每个实例。我只需要显示指定的一个,例如,如果我的文章A与服务器S相关,我只想显示S,而不是显示服务器A的列表,服务器B等...我通过了官方doc和各种论坛,但我不知道如何做到这一点。
提前感谢您的帮助。
下面是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'}),
}
答案 0 :(得分:0)
您可以使用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'}
)
# ...
这是官方文档的一个lint: https://docs.djangoproject.com/en/1.11/ref/models/fields/#django.db.models.ManyToManyField.limit_choices_to