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

Posted hbyang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django ORM多对多正向查询时查询返回结果为None相关的知识,希望对你有一定的参考价值。

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的主要内容,如果未能解决你的问题,请参考以下文章

Python入门自学进阶-Web框架——6Django的ORM-多对多admin应用

django ORM中的RelatedManager(关联管理器)

逻辑或 Django 多对多查询返回重复结果

Django ORM - 通过模型查询多对多?

Python学习第135天(Django的ORM多对多查询)

Django的orm需要注意的地方