码迷,mamicode.com
首页 > 其他好文 > 详细

django ORM多对多正向查询时查询返回结果为None

时间:2020-02-28 13:51:47      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:span   mail   phone   manager   oca   forward   any   重建   问题解决   

表

class Books(models.Model):
    ‘‘‘书籍‘‘‘
    id = models.AutoField(primary_key=True)
    name = models.CharField(verbose_name=‘书籍名‘, max_length=32)class Writer(models.Model):
    ‘‘‘作者‘‘‘
    id = models.AutoField(primary_key=True)
    name = models.CharField(verbose_name=‘名字‘, max_length=32)
    Email = models.EmailField(verbose_name=‘邮件‘)
    phone = models.CharField(verbose_name=‘手机号‘, max_length=32)
    book = models.ManyToManyField(verbose_name=‘书籍‘, to=Books)

按照我们的理解

print(obj.book.name)

None

问题解决

注意:要说明的是多对多的查询用.all,查单个的时候用.values或者values_list,不要用obj.book.name,这样查到的会是None,反向查询也是如此。

总结:不管是一对多,还是多对多,要是查询多得一方就得用all()

print(obj.book.values)

<bound method BaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_method of <django.db.models.fields.related_descriptors.create_forward_many_to_many_manager.<locals>.ManyRelatedManager object at 0x03F8A950>>

print(obj.book.values(‘name‘))
<QuerySet [{‘name‘: ‘鬼吹灯‘}, {‘name‘: ‘择天记‘}, {‘name‘: ‘大主宰‘}, {‘name‘: ‘名族的重建‘}]>

 

django ORM多对多正向查询时查询返回结果为None

标签:span   mail   phone   manager   oca   forward   any   重建   问题解决   

原文地址:https://www.cnblogs.com/HByang/p/12376770.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!