Through a practical example to illustrate the usage of the database operation method ManyToManyField() in Django [data table "many-to-many" relationship]

When it comes to database design for many-to-many relationships, Django provides ManyToManyField()fields, which allow many-to-many associations between two models. Let's illustrate its usage with a practical example.

Let's say we're building a simple blogging application with two models: Author(Author) and Post(Post). An author can write multiple posts, and a post can have multiple authors. This is a typical many-to-many relationship.

First, we need to define these two models and ManyToManyField()establish a many-to-many relationship between them using Here is sample code:

from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=100)
    posts = models.ManyToManyField('Post')

    def __str__(self):
        return self.name

class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()

    def __str__(self):
        return self.title

In the code above, Authorthe model contains a field called , which is used to establish a many-to-many relationship with poststhe model. Also, the model does not directly reference the model, but establishes an association through the fields of the model .ManyToManyField()PostPostAuthorAuthorManyToManyField()

We can now create tables for these two models in the database. Run Django's migration command to sync the models into the database:

python manage.py makemigrations
python manage.py migrate

Now, we can use ManyToManyField()fields for many-to-many associations. Here are some common examples:

Create a many-to-many association:

author1 = Author.objects.create(name='John')
author2 = Author.objects.create(name='Jane')

post1 = Post.objects.create(title='Post 1', content='Content 1')
post2 = Post.objects.create(title='Post 2', content='Content 2')

# 添加多对多关联
post1.authors.add(author1)
post1.authors.add(author2)

post2.authors.add(author1)

In the example above, we created two authors (John and Jane) and two posts (Post 1 and Post 2), and then used add()methods to relate them. add()method is used to ManyToManyField()add the associated object in the field.

Query many-to-many associations:

# 获取帖子的作者列表
post = Post.objects.get(title='Post 1')
authors = post.authors.all()

# 获取作者的帖子列表
author = Author.objects.get(name='John')
posts = author.posts.all()

In the example above, we used all()the method to get a list of all objects associated with a particular post or author.

Remove a many-to-many association:

# 移除帖子的作者关联
post = Post.objects.get(title='Post 1')
post.authors.remove(author1)

# 清除作者的帖子关联
author = Author.objects.get(name='John')
author.posts.clear()
``

Guess you like

Origin blog.csdn.net/wenhao_ir/article/details/131552739