django 外键获取

本文探讨了如何通过Blog模型的示例,理解反向查询在Django中如何操作。主要内容包括Blog和Entry模型的ForeignKey关系,以及如何使用相关名来管理对象。核心是前端开发,涉及模型间的链接和查询技巧。
摘要由CSDN通过智能技术生成
from django.db import models

class Blog(models.Model):
    name = models.CharField(max_length=100)
    tagline = models.TextField()

    def __str__(self):              # __unicode__ on Python 2
        return self.name

class Author(models.Model):
    name = models.CharField(max_length=50)
    email = models.EmailField()

    def __str__(self):              # __unicode__ on Python 2
        return self.name

class Entry(models.Model):
    blog = models.ForeignKey(Blog)
    headline = models.CharField(max_length=255)
    body_text = models.TextField()
    pub_date = models.DateField()
    mod_date = models.DateField()
    authors = models.ManyToManyField(Author)
    n_comments = models.IntegerField()
    n_pingbacks = models.IntegerField()
    rating = models.IntegerField()

    def __str__(self):              # __unicode__ on Python 2
        return self.headline

反向查询

如果模型I有一个ForeignKey,那么该ForeignKey 所指的模型II实例可以通过一个管理器返回前面有ForeignKey的模型I的所有实例。默认情况下,这个管理器的名字为foo_set,其中foo 是源模型的小写名称。该管理器返回的查询集可以用上一节提到的方式进行过滤和操作。

例如:

>>> b = Blog.objects.get(id=1)
>>> b.entry_set.all() # Returns all Entry objects related to Blog.

# b.entry_set is a Manager that returns QuerySets.
>>> b.entry_set.filter(headline__contains='Lennon')
>>> b.entry_set.count()
你可以在ForeignKey 定义时设置related_name 参数来覆盖foo_set 的名称。例如,如果Entry 模型改成blog =ForeignKey(Blog, related_name='entries'),那么上面的示例代码应该改成这样:

>>> b = Blog.objects.get(id=1)
>>> b.entries.all() # Returns all Entry objects related to Blog.

# b.entries is a Manager that returns QuerySets.
>>> b.entries.filter(headline__contains='Lennon')
>>> b.entries.count()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django 中的外键操作主要涉及到以下几个步骤: 1. 创建模型类时定义外键字段; 2. 在视图函数中进行增删改查操作; 3. 编写模板文件展示数据。 下面分别介绍这些步骤的具体实现。 1. 创建模型类时定义外键字段 在 Django 中,外键字段通过 ForeignKey 类型定义。例如,如果有一个模型类 Article,需要与另一个模型类 Category 建立外键关系,可以在 Article 中定义一个 category 字段,类型为 ForeignKey(Category, on_delete=models.CASCADE),其中 Category 是外键关联的模型类,on_delete=models.CASCADE 表示级联删除。 示例代码: ```python from django.db import models class Category(models.Model): name = models.CharField(max_length=50) class Article(models.Model): title = models.CharField(max_length=100) content = models.TextField() category = models.ForeignKey(Category, on_delete=models.CASCADE) ``` 2. 在视图函数中进行增删改查操作 在视图函数中进行外键操作时,需要先获取外键关联的模型对象,再通过关联对象进行增删改查操作。 例如,如果需要查询所有分类为“Python”的文章,可以先获取分类对象,再通过分类对象获取所有文章对象。 示例代码: ```python from django.shortcuts import render from .models import Category, Article def article_list(request): # 获取所有分类为“Python”的文章 category = Category.objects.get(name='Python') articles = category.article_set.all() return render(request, 'article_list.html', {'articles': articles}) ``` 在上面的代码中,category.article_set.all() 表示获取所有与 category 对象关联的文章对象。 对于添加、删除和修改操作,也是先获取关联对象,再通过关联对象进行操作。例如,如果需要添加一篇分类为“Python”的文章,可以先获取分类对象,再通过分类对象创建文章对象。 示例代码: ```python def article_add(request): # 获取分类为“Python”的分类对象 category = Category.objects.get(name='Python') # 创建一篇新文章 article = Article(title='New Article', content='Content', category=category) article.save() return render(request, 'article_add.html') ``` 3. 编写模板文件展示数据 在模板文件中展示外键关联的数据时,可以通过关联对象的属性进行访问。例如,如果需要在文章列表页面中展示文章的分类信息,可以使用 article.category.name。 示例代码: ```html {% for article in articles %} <div> <h3>{{ article.title }}</h3> <p>{{ article.content }}</p> <p>分类:{{ article.category.name }}</p> </div> {% endfor %} ``` 以上就是 Django外键的增删改查操作的基本流程和示例代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值