添加记录时,“多对多”字段未显示在管理页面中

时间:2018-09-28 02:18:39

标签: python django django-models django-forms

我想与这两个表建立多对多关系

1.Qa表

-------------
|ID |   QA  |
-------------
|1  |qa1    |
|2  |qa2    |
|3  |qa3    |
-------------

2。标记表

-------------
|ID |   Tag |
-------------
|1  |tag1   |
|2  |tag2   |
|3  |tag3   |
-------------

为此,我制作了以下3个模型

质量检查模型

class Qa(models.Model):

    question_text = models.CharField(max_length=1000, verbose_name='Question')
    tags = select2.fields.ManyToManyField(Tag, blank=True, through = 'Qa_Tag', verbose_name='Tag')
    """
    And some more fields.
    """

    def __str__(self):
        return self.question_text

    class Meta:
        ordering = ("id",)
        verbose_name = 'QA data'

标记模型

class Tag(models.Model):
    tag_text = models.CharField(max_length=30, unique=True, verbose_name='Tag')

    def __str__(self):
        return self.tag_text

    class Meta:
        verbose_name = 'Tag'

和保持关系的模型

Qa_Tag模型

class Qa_Tag(models.Model):

    tag = models.ForeignKey(Tag, verbose_name='tag')
    qa = models.ForeignKey(Qa, verbose_name='qa')

    def __str__(self):
        return  self.tag.tag_text 

,然后在我的forms.py中添加这些字段。

class QaAdminForm(ModelForm):
    class Meta:
        model = Qa
        fields = ('question_text', 'tags', 'some_more-fields')

当我尝试添加质量检查记录表格时,显示除标签外的所有字段。 如果我在admin.py中注册此模型,则可以将数据添加到标签和质量检查中,然后可以通过Qa_tag建立关系。 但是实际上我不想要那个Qa_tag。

在没有through = 'Qa_Tag'Qa_Tag模型的情况下,ManyToManyField可以按照我的上述代码工作。但是我需要__str__模型的Qa_Tag函数来显示可理解的文本。

我该如何纠正。

0 个答案:

没有答案