Skip to main content

Any type of package needs to install for using many to many relationships in Django

If you are doing work with Django then learn this post it is very usefully 

 Any type of package needs to install for using many to many relationships in Django 

  

Many to Many RelationShip In Django

Here...Any type of package needs to install for using many to many relationships in Django 

         There are some excellent idea to help you make the new concepts, you are learning 

         as a beginner to Any type of package needs to 

         install for using many to many relationships in Django explain step by step here...

=>Django application has a GM2MField that combines the features 

          of the standard Django “ManyToManyField” and “GenericForeignKey”.


   =>Installation:

 >> pip install django-gm2m

=>Django’s contenttype framework must be 

       (django.contrib.contenttypes) mentionned 

       in the INSTALLED_APPS.

INSTALLED_APPS = [

   ...

   'django.contrib.contenttypes',

   ...

   'gm2m',

]

=>Uses Of django-gm2m:

       1.reverse relations

       2.prefetching

       3. Allows you to customize the deletion behaviour


      In this example, an article can be published in multiple Publication 

      objects and a Publication has multiple Article objects:

from Django.db import models


class Publication(models.Model):

    title = models.CharField(max_length=30)

 class Meta:

        ordering = ['title']


    def __str__(self):

        return self.title


class Article(models.Model):

    headline = models.CharField(max_length=100)

    publications = models.ManyToManyField(Publication)


    class Meta:

        ordering = ['headline']


    def __str__(self):

        return self.headline

     What follows are examples of operations that can be performed using the Python API facilities.

Create a few Publications:


>>> p1 = Publication(title='The Python Journal')

>>> p1.save()

>>> p2 = Publication(title='Science News')

>>> p2.save()

>>> p3 = Publication(title='Science Weekly')

>>> p3.save()


=>Create an Article:

>>> a1 = Article(headline='Django lets you build Web apps easily')

You can’t associate it with a Publication until it’s been saved:


>>> a1.publications.add(p1)

Traceback (most recent call last):

ValueError: "<Article: Django lets you build Web apps easily>" needs to have a value for field "id" before this many-to-many relationship can be used.

Save it!

>>> a1.save()

Associate the Article with a Publication:

>>> a1.publications.add(p1)

Create another Article, and set it to appear in the Publications:

>>> a2 = Article(headline='NASA uses Python')

>>> a2.save()

>>> a2.publications.add(p1, p2)

>>> a2.publications.add(p3)

Adding a second time is OK, it will not duplicate the relation:

>>> a2.publications.add(p3)

Adding an object of the wrong type raises TypeError:

>>> a2.publications.add(a1)

Traceback (most recent call last):

TypeError: 'Publication' instance expected

Create and add a Publication to an Article in one step using create():

>>> new_publication = a2.publications.create(title='Highlights for Children')

Article objects have access to their related Publication objects:

>>> a1.publications.all()

<QuerySet [<Publication: The Python Journal>]>

>>> a2.publications.all()

<QuerySet [<Publication: Highlights for Children>, <Publication: Science News>, <Publication: Science Weekly>, <Publication: The Python Journal>]>

Publication objects have access to their related Article objects:

>>> p2.article_set.all()

<QuerySet [<Article: NASA uses Python>]>

>>> p1.article_set.all()

<QuerySet [<Article: Django lets you build Web apps easily>, <Article: NASA uses Python>]>

>>> Publication.objects.get(id=4).article_set.all()

<QuerySet [<Article: NASA uses Python>]>


Many-to-many relationships can be queried using lookups across relationships:

>>> Article.objects.filter(publications__id=1)

<QuerySet [<Article: Django lets you build Web apps easily>, <Article: NASA uses Python>]>

>>> Article.objects.filter(publications__pk=1)

<QuerySet [<Article: Django lets you build Web apps easily>, <Article: NASA uses Python>]>

>>> Article.objects.filter(publications=1)

<QuerySet [<Article: Django lets you build Web apps easily>, <Article: NASA uses Python>]>

>>> Article.objects.filter(publications=p1)

<QuerySet [<Article: Django lets you build Web apps easily>, <Article: NASA uses Python>]>



>>> Article.objects.filter(publications__title__startswith="Science")

<QuerySet [<Article: NASA uses Python>, <Article: NASA uses Python>]>


>>> Article.objects.filter(publications__title__startswith="Science").distinct()

<QuerySet [<Article: NASA uses Python>]>

The count() function respects distinct() as well:


>>> Article.objects.filter(publications__title__startswith="Science").count()

2


>>> Article.objects.filter(publications__title__startswith="Science").distinct().count()

1


>>> Article.objects.filter(publications__in=[1,2]).distinct()

<QuerySet [<Article: Django lets you build Web apps easily>, <Article: NASA uses Python>]>

>>> Article.objects.filter(publications__in=[p1,p2]).distinct()

<QuerySet [<Article: Django lets you build Web apps easily>, <Article: NASA uses Python>]>


Reverse m2m queries are supported (i.e., starting at 

the table that doesn’t have a ManyToManyField):

>>> Publication.objects.filter(id=1)

<QuerySet [<Publication: The Python Journal>]>

>>> Publication.objects.filter(pk=1)

<QuerySet [<Publication: The Python Journal>]>

>>> Publication.objects.filter(article__headline__startswith="NASA")

<QuerySet [<Publication: Highlights for Children>, <Publication: Science News>, <Publication: Science Weekly>, <Publication: The Python Journal>]>


>>> Publication.objects.filter(article__id=1)

<QuerySet [<Publication: The Python Journal>]>

>>> Publication.objects.filter(article__pk=1)

<QuerySet [<Publication: The Python Journal>]>

>>> Publication.objects.filter(article=1)

<QuerySet [<Publication: The Python Journal>]>

>>> Publication.objects.filter(article=a1)

<QuerySet [<Publication: The Python Journal>]>


>>> Publication.objects.filter(article__in=[1,2]).distinct()

<QuerySet [<Publication: Highlights for Children>, <Publication: Science News>, <Publication: Science Weekly>, <Publication: The Python Journal>]>

>>> Publication.objects.filter(article__in=[a1,a2]).distinct()

<QuerySet [<Publication: Highlights for Children>, <Publication: Science News>, <Publication: Science Weekly>, <Publication: The Python Journal>]>


Excluding a related item works as you would expect, too (although the SQL involved is a little complex):

>>> Article.objects.exclude(publications=p2)

<QuerySet [<Article: Django lets you build Web apps easily>]>

If we delete a Publication, its Articles won’t be able to access it:


>>> p1.delete()

>>> Publication.objects.all()

<QuerySet [<Publication: Highlights for Children>, <Publication: Science News>, <Publication: Science Weekly>]>

>>> a1 = Article.objects.get(pk=1)

>>> a1.publications.all()

<QuerySet []>

If we delete an Article, its Publications won’t be able to access it:

>>> a2.delete()

>>> Article.objects.all()

<QuerySet [<Article: Django lets you build Web apps easily>]>

>>> p2.article_set.all()

<QuerySet []>

Adding via the ‘other’ end of an m2m:

>>> a4 = Article(headline='NASA finds intelligent life on Earth')

>>> a4.save()

>>> p2.article_set.add(a4)

>>> p2.article_set.all()

<QuerySet [<Article: NASA finds intelligent life on Earth>]>

>>> a4.publications.all()

<QuerySet [<Publication: Science News>]>

Adding via the other end using keywords:

>>> new_article = p2.article_set.create(headline='Oxygen-free diet works wonders')

>>> p2.article_set.all()

<QuerySet [<Article: NASA finds intelligent life on Earth>, <Article: Oxygen-free diet works wonders>]>

>>> a5 = p2.article_set.all()[1]

>>> a5.publications.all()

<QuerySet [<Publication: Science News>]>

Removing Publication from an Article:

>>> a4.publications.remove(p2)

>>> p2.article_set.all()

<QuerySet [<Article: Oxygen-free diet works wonders>]>

>>> a4.publications.all()

<QuerySet []>



And from the other end:

>>> p2.article_set.remove(a5)

>>> p2.article_set.all()

<QuerySet []>

>>> a5.publications.all()

<QuerySet []>




Relation sets can be set:

>>> a4.publications.all()

<QuerySet [<Publication: Science News>]>

>>> a4.publications.set([p3])

>>> a4.publications.all()

<QuerySet [<Publication: Science Weekly>]>



Relation sets can be cleared:

>>> p2.article_set.clear()

>>> p2.article_set.all()

<QuerySet []>



And you can clear from the other end:

>>> p2.article_set.add(a4, a5)

>>> p2.article_set.all()

<QuerySet [<Article: NASA finds intelligent life on Earth>, <Article: Oxygen-free diet works wonders>]>

>>> a4.publications.all()

<QuerySet [<Publication: Science News>, <Publication: Science Weekly>]>

>>> a4.publications.clear()

>>> a4.publications.all()

<QuerySet []>

>>> p2.article_set.all()

<QuerySet [<Article: Oxygen-free diet works wonders>]>




Recreate the Article and Publication we have deleted:

>>> p1 = Publication(title='The Python Journal')

>>> p1.save()

>>> a2 = Article(headline='NASA uses Python')

>>> a2.save()

>>> a2.publications.add(p1, p2, p3)


Bulk delete some Publications - references to deleted publications should go:

>>> Publication.objects.filter(title__startswith='Science').delete()

>>> Publication.objects.all()

<QuerySet [<Publication: Highlights for Children>, <Publication: The Python Journal>]>

>>> Article.objects.all()

<QuerySet [<Article: Django lets you build Web apps easily>, <Article: NASA finds intelligent life on Earth>, <Article: NASA uses Python>, <Article: Oxygen-free diet works wonders>]>

>>> a2.publications.all()

<QuerySet [<Publication: The Python Journal>]>


Bulk delete some articles - references to deleted objects should go:

>>> q = Article.objects.filter(headline__startswith='Django')

>>> print(q)

<QuerySet [<Article: Django lets you build Web apps easily>]>

>>> q.delete()


After the delete(), the QuerySet cache needs to be cleared, and the referenced objects should be gone:

>>> print(q)

<QuerySet []>

>>> p1.article_set.all()

<QuerySet [<Article: NASA uses Python>]>


Conclusion-In this tutorial you will have learned how  Any type of package needs to install for 

                using many to many relationships in Django

                So hope you liked these tutorials. If you have any questions or suggestions related to Django please comment below and let us know.

                Finally, if you find this post informative, then share it with 

                your friends on Facebook, Twitter, Instagram. 


 Thank you...


Comments

Popular posts from this blog

How to Send OTP in Mobile Number | login with OTP mobile Number | How to send OTP in mobile no with Spring Boot APP

   ðŸ˜‚               Login with Mobile Number OTP ---------------------------------------------------------------------------- If you want to develop a project to log in with OTP mobile Number in Spring Boot Applications then this post for you. In this post, I am going to use some other service to send the OTP in mobile number. we have to use it in this project spring boot. we are going to use Twilio to send SMS. we are going to use a web socket to send the data from the browser to the SMS gateway. Oracle Database for store the user details. <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> <version>2.3.3.RELEASE</version> </dependency> <dependency> <groupId>com.twilio.sdk</grou

Spring Boot With MySQL Database connection with Examples | MySQl Database Configuration with Spring Boot Projects

 ðŸ˜ƒ MySQL Database Configuration with Spring Boot Projects  In this article, we are going to introduce How to connect MySQL Database with the Spring Boot project. pom.xml   <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</gro

How can we create Auto generated field or ID for mongodb using spring boot

😂 How can we create an Auto-generated field or ID for MongoDB using spring boot? First Create One Application Like Mongodb_sequence-id-generator Pom.XML <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> <dependency> <groupId>de.flapdoodle.embed</groupId> <artifactId>de.flapdoodle.embed.mongo</artifactId> </dependency> User.java package com.app; import org.springframework.data.annotation.Id; import org.springframework.data.annotation.Transient; import org.springframework.data.mongodb.core.mapping.Document; @Document(collection = "users_db") public class User { @Transient public static final String SEQUENCE_NAME = &