> For the complete documentation index, see [llms.txt](https://olee-tech.gitbook.io/django/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://olee-tech.gitbook.io/django/django-orm/model-relationships-and-related-names/many-to-many-relationships.md).

# Many-to-Many Relationships

Many-to-many relationships are used when multiple instances of one model can be related to multiple instances of another model. Consider a scenario where we have a **Tag** model associated with a **Post** model. A post can have multiple tags, and a tag can be associated with multiple posts. In Django, you can define a many-to-many relationship using the **ManyToManyField**:

```python
from django.db import models


class Tag(models.Model):
  name = models.CharField(max_length=50)


class Post(models.Model):
  title = models.CharField(max_length=200)
  content = models.TextField()
  tags = models.ManyToManyField(Tag, related_name="posts")
```

In this example, the Post model includes a tags field, which is a ManyToManyField that establishes a many-to-many relationship with the Tag model. The related\_name=”posts” option allows you to access the posts related to a tag easily.

```python
# Import your models
from yourapp.models import Post

# Assuming you have a post with the ID 1
post = Post.objects.get(id=1)

# Access the tags associated with the post using the related_name "posts"
tags = post.tags.all()

# Loop through and print the names of the tags
for tag in tags:
    print(tag.name)
```
