尝试使用Django表单中的\u集时发生AttributeError(用于筛选器\u水平小部件)

2024-03-29 07:59:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我只是想为一个模型的管理表单上的一个字段配置一个filter\u水平小部件。但是,当我尝试使用\u set来反转m2m关系时,会出现以下错误。你知道吗

我正在为其创建表单的模型称为Statement。我尝试使用一个字段,它调用了keywords,它用另一个模型绘制了一个m2m。你知道吗

class Statement(models.Model):
   statement_id = models.CharField(max_length=200)
   title = models.CharField(max_length=200)
   issue_date = models.DateField("Issue-Date")
   author = models.ForeignKey(Person)
   released_by = models.ForeignKey(Organization)
   keywords = models.ManyToManyField('KeywordInContext')

因此,在表单中,我尝试配置filter\u horizontal小部件,但是当我尝试使用keywords_set时,得到了一个属性错误。你知道吗

class StatementForm(forms.ModelForm):
 statement_keywords = forms.ModelMultipleChoiceField(
    queryset=KeywordInContext.objects.all(),
    required=False,
    label=('Select keywords that you would like to assign to this statement on the left. Keywords that are assigned to this statement are on the right.'),
    widget=FilteredSelectMultiple(
        verbose_name='Keywords Associated with Statement',
        is_stacked=False
      )
)
def __init__(self, *args, **kwargs):
    super(StatementForm, self).__init__(*args, **kwargs)
    if self.instance.pk:
       self.fields['statement_keywords'].initial = self.instance.keywords_set.all() ##CAUSES ATTRIBUTE ERROR

def save(self, commit=True):
    statement = super(StatementForm, self).save(commit=False)
    if commit:
        statement.save()
    if statement.pk:
        statement.keywords_set = self.cleaned_data['keywords'] #change to keyword if need be
        self.save_m2m()

    return statement

我收到的错误信息是

 File "./gtr_site/forms.py", line 73, in __init__
     self.fields['statement_keywords'].initial = self.instance.keywords_set.all()
      AttributeError: 'Statement' object has no attribute 'keywords_set'

最让我困惑的是,这个错误消息可以识别Statement对象,但是提供给我访问“keywords\u set”属性(试图反转m2m关系)的信息是不正确的。你知道吗

问题是什么?这可能是一个次要的语法问题,但这就是我认为我能够用这种方式逆转关键字字段的m2m关系的方式。你知道吗


Tags: to模型self表单if关系modelssave
1条回答
网友
1楼 · 发布于 2024-03-29 07:59:32

您在语句上有多个关系,要访问此关系是throw keywords而不是keywords\u set

 statement.keywords.all()

要在KeywordInContext模型上访问此关系,必须设置throw语句

KeywordInContext.statement_set.all()

相关问题 更多 >