Django ManyToMany字段add()不起作用

时间:2015-10-05 20:28:32

标签: python django django-models many-to-many django-orm

我的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_FIELDmy_field这个问题?或者也许我如何生成MyModel?还是有其他问题吗?

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

1 个答案:

答案 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+'