2015-10-05 51 views
1

我定義爲我的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_FIELDmy_fieldMyModel定義的問題?或者,也許在我如何生成ManyToManyField?還是有其他問題?

UPDATE:問題出在related.pyget_queryset函數中。 self.core_filters設置爲{'+__year': 2015},但是,當我查詢qs.values('+__year')時,我得到{'+__year': None}。 (year是在模型中的另一個字段)

+1

你不應該一直搞亂字段的定義方式。有很多元類的東西可以使聲明語法起作用,我懷疑它可以在你的獨立函數中起作用。 –

+0

爲什麼你的'my_field'有奇怪的設置?你的工作不會是一個正常的m2m領域嗎? –

+0

羅斯曼 - 遷移文件的工作,雖然。你仍然認爲這不是最好的?如果我也可以用'MY_FIELD_LABEL'代替它會更好嗎? //王 - 奇怪的設置是因爲我有大約50個ManyToMany字段,我希望能夠從類級別訪問字段的名稱。 – brandonchinn178

回答

相關問題