我定義爲我的Django模型字段:Django的多對多字段添加()不工作
def get_field(**kwargs):
kwargs.setdefault('related_name', '+')
return models.ManyToManyField('app.MyOtherModel', **kwargs)
class MyModel(models.Model):
MY_FIELD = 'A label for my field'
my_field = get_field() # wrote function to DRY creation of fields
但每當我嘗試添加一些領域,這是行不通的:
foo = MyOtherModel.objects.create(...)
m = MyModel.objects.get(...)
m.my_field.add(foo)
m.my_field.all() # returns []
做一些挖掘到Django的源代碼,ManyRelatedManager.add()
功能(在django/db/models/fields/related.py
)正常工作,與self.through.objects.all()
在函數的最後返回正確的對象,但self.all()
不對,導致我認爲這個問題是在get_queryset()
:
# printing self.through.objects.all() @ related.py:978
[<MyModel_myothermodel: MyModel_myothermodel object>]
# printing self.all() @ related.py:978
[]
是在事實上,我都MY_FIELD
和my_field
在MyModel
定義的問題?或者,也許在我如何生成ManyToManyField
?還是有其他問題?
UPDATE:問題出在related.py
的get_queryset
函數中。 self.core_filters
設置爲{'+__year': 2015}
,但是,當我查詢qs.values('+__year')
時,我得到{'+__year': None}
。 (year
是在模型中的另一個字段)
你不應該一直搞亂字段的定義方式。有很多元類的東西可以使聲明語法起作用,我懷疑它可以在你的獨立函數中起作用。 –
爲什麼你的'my_field'有奇怪的設置?你的工作不會是一個正常的m2m領域嗎? –
羅斯曼 - 遷移文件的工作,雖然。你仍然認爲這不是最好的?如果我也可以用'MY_FIELD_LABEL'代替它會更好嗎? //王 - 奇怪的設置是因爲我有大約50個ManyToMany字段,我希望能夠從類級別訪問字段的名稱。 – brandonchinn178