Django
  • Django 中文文档
    • Getting help
    • 新手入门
    • 模型层(model)
    • 视图层(view)
    • 模板层(template)
    • 表单(Forms)
    • 开发流程
    • 管理
    • 安全
    • 国际化和本地化
    • Python的兼容性
    • 地理框架
    • 常用的web应用工具
    • 其他核心功能
    • Django 开源项目
  • 新手入门
    • 初探 Django
    • 快速安装指南
    • 编写你的第一个 Django 程序 第1部分
    • 编写你的第一个 Django 程序 第2部分
    • 编写你的第一个 Django 程序 第3部分
    • 编写你的第一个 Django 程序 第4部分
    • 编写你的第一个 Django 程序 第5部分
    • 进阶教程:如何编写可重用的应用程序
    • 下一步阅读什么
    • 为Django编写属于你的首个补丁
  • 使用 Django
    • 如何安装 Django
    • Models and databases
    • Handling HTTP requests
    • Working with forms
    • The Django template language
    • Class-based views
    • Managing files
    • Testing in Django
    • User authentication in Django
    • Django’s cache framework
    • Conditional View Processing
    • Cryptographic signing
    • Sending email
    • Internationalization and localization
    • Logging
    • Pagination
    • Porting to Python 3
    • Security in Django
    • Serializing Django objects
    • Django settings
    • Signals
  • “How-to” guides
    • Authentication using REMOTE_USER
    • Writing custom django-admin commands
    • Writing custom model fields
    • Custom template tags and filters
    • Writing a custom storage system
    • Deploying Django
    • Error reporting
    • Providing initial data for models
    • Running Django on Jython
    • Integrating Django with a legacy database
    • Outputting CSV with Django
    • Outputting PDFs with Django
    • Managing static files
  • Django FAQ
    • FAQ: General
    • FAQ: Installation
    • FAQ: Using Django
    • FAQ: Getting Help
    • FAQ: Databases and models
    • FAQ: The admin
    • FAQ: Contributing code
    • Troubleshooting
  • API 参考
    • Class-based views
    • Clickjacking Protection
    • contrib packages
    • Databases
    • django-admin.py and manage.py
    • Running management commands from your code
    • Django 异常
    • File handling
    • Forms
    • Middleware
    • Models
    • Request and response objects
    • TemplateResponse and SimpleTemplateResponse
    • Settings
    • Signals
    • Templates
    • Unicode data
    • django.core.urlresolvers utility functions
    • django.conf.urls utility functions
    • Django Utils
    • Validators
  • Meta-documentation and miscellany
    • API stability
    • Design philosophies
    • Third-party distributions of Django
  • Glossary
  • Release notes
    • Final releases
    • Development releases
  • Django internals
    • Contributing to Django
    • Django committers
    • Django’s security policies
    • Django’s release process
    • Django Deprecation Timeline
    • The Django source code repository
 
Django
  • Docs »
  • API 参考 »
  • Models »
  • Related objects reference
  • 返回在线手册中心

Related objects reference¶

class RelatedManager¶

A “related manager” is a manager used in a one-to-many or many-to-many related context. This happens in two cases:

  • The “other side” of a ForeignKey relation. That is:

    class Reporter(models.Model):
        ...
    
    class Article(models.Model):
        reporter = models.ForeignKey(Reporter)
    

    In the above example, the methods below will be available on the manager reporter.article_set.

  • Both sides of a ManyToManyField relation:

    class Topping(models.Model):
        ...
    
    class Pizza(models.Model):
        toppings = models.ManyToManyField(Topping)
    

    In this example, the methods below will be available both on topping.pizza_set and on pizza.toppings.

These related managers have some extra methods:

add(obj1[, obj2, ...])¶

Adds the specified model objects to the related object set.

Example:

>>> b = Blog.objects.get(id=1)
>>> e = Entry.objects.get(id=234)
>>> b.entry_set.add(e) # Associates Entry e with Blog b.
create(**kwargs)¶

Creates a new object, saves it and puts it in the related object set. Returns the newly created object:

>>> b = Blog.objects.get(id=1)
>>> e = b.entry_set.create(
...     headline='Hello',
...     body_text='Hi',
...     pub_date=datetime.date(2005, 1, 1)
... )

# No need to call e.save() at this point -- it's already been saved.

This is equivalent to (but much simpler than):

>>> b = Blog.objects.get(id=1)
>>> e = Entry(
...     blog=b,
...     headline='Hello',
...     body_text='Hi',
...     pub_date=datetime.date(2005, 1, 1)
... )
>>> e.save(force_insert=True)

Note that there’s no need to specify the keyword argument of the model that defines the relationship. In the above example, we don’t pass the parameter blog to create(). Django figures out that the new Entry object’s blog field should be set to b.

remove(obj1[, obj2, ...])¶

Removes the specified model objects from the related object set:

>>> b = Blog.objects.get(id=1)
>>> e = Entry.objects.get(id=234)
>>> b.entry_set.remove(e) # Disassociates Entry e from Blog b.

In order to prevent database inconsistency, this method only exists on ForeignKey objects where null=True. If the related field can’t be set to None (NULL), then an object can’t be removed from a relation without being added to another. In the above example, removing e from b.entry_set() is equivalent to doing e.blog = None, and because the blog ForeignKey doesn’t have null=True, this is invalid.

clear()¶

Removes all objects from the related object set:

>>> b = Blog.objects.get(id=1)
>>> b.entry_set.clear()

Note this doesn’t delete the related objects – it just disassociates them.

Just like remove(), clear() is only available on ForeignKeys where null=True.

Next Previous

© Copyright Django Software Foundation and contributors. Last updated on Dec 23, 2014.