外键查询

class AuthorInfo(models.Model):
    name = models.CharField(max_length=100)
    gender = models.CharField(max_length=100)
    def __str__(self):
        return self.name

    class Meta:
        verbose_name = "作者表"
        verbose_name_plural = verbose_name




class BookInfo(models.Model):
    author = models.ForeignKey(AuthorInfo,related_name="zuozhe",on_delete=models.CASCADE)
    title = models.CharField(max_length=100)
    price = models.CharField(max_length=100)
    def __str__(self):
        return self.title

    class Meta:
        verbose_name = "图书表"
        verbose_name_plural = verbose_name

from .models import AuthorInfo,BookInfo
admin.site.register(AuthorInfo)
admin.site.register(BookInfo)

  

通过外键所在表查询另外一张表的属性:

BookInfo.objects.filter().values("author__name")

通过另一张表的属性获取外键所在表的对象:

objs = BookInfo.objects.filter(author__gender="男")

通过外键所在表的实例,查找对应另一张表的实例:

obj = BookInfo.objects.all().first()

obj = AuthorInfo.objects.filter(zuozhe=obj).all()

通过外键所在表的属性,查找另一张表的对象: related_name的用处

obj = AuthorInfo.objects.filter(zuozhe__title__icontains="书").all()
for obj in obj:
print(obj.name, obj.gender)

张三 男
张三 男
小红 女
小红 女

支持去重

obj = AuthorInfo.objects.filter(zuozhe__title__icontains="书").distinct()

 支持属性去重:

obj = AuthorInfo.objects.filter(zuozhe__title__icontains="书").values("gender").distinct()
for obj in obj:
print(obj)

{'gender': '男'}
{'gender': '女'}

原文地址:https://www.cnblogs.com/realadmin/p/11946610.html