我的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()
在函数末尾返回正确的对象,但是{{1没有,导致我认为问题出在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
函数的related.py
中。 get_queryset
设置为self.core_filters
,但是,当我查询{'+__year': 2015}
时,我得到qs.values('+__year')
。 ({'+__year': None}
是模型中的另一个字段)
答案 0 :(得分:0)
我想我在旧的Django文档中找到了答案:https://docs.djangoproject.com/en/1.4/ref/models/fields/#django.db.models.ManyToManyField.related_name
即使我使用related_name
,我也需要指定唯一的+
值。所以我需要related_name='foo+'
和related_name='bar+'