Django ManyToMany Field add() not working



我在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
[]

问题是我在MyModel中定义了MY_FIELDmy_field吗?或者我如何生成ManyToManyField ?还是有其他问题?

UPDATE:问题在get_queryset函数中的related.py中。self.core_filters设置为{'+__year': 2015},但是,当我查询qs.values('+__year')时,我得到{'+__year': None}。(year是模型中的另一个字段)

我想我在旧的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+'

最新更新