"模型表单多对多"字段仅显示分配的值



我正在使用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

最新更新