0
我只是想爲模型的管理表單中的某個字段配置一個filter_horizontal小部件。但是當我嘗試使用_set來反轉m2m關係時,出現以下錯誤。當試圖在Django窗體中使用_set時出現AttributeError
我正在創建表單的模型被稱爲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_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_set」屬性(試圖扭轉m2m關係)是不正確的。
問題是什麼?這可能是一個小句法,但這是我認爲我能夠通過這種方式扭轉關鍵字字段的m2m關係的方式。