ModelForm ManyToMany字段仅显示指定的值

时间:2017-06-30 14:35:27

标签: django django-forms

我使用Django ModelForm来显示有关硬件文章的信息。一切都很顺利,但是当涉及到许多领域时,默认行为是显示相关模型的每个实例。我只需要显示指定的一个,例如,如果我的文章A与服务器S相关,我只想显示S,而不是显示服务器A的列表,服务器B等...我通过了官方doc和各种论坛,但我不知道如何做到这一点。

提前感谢您的帮助。

What I got now

下面是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'}),
        }

1 个答案:

答案 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