[Fixed]-Django admin InlineModels for manytomany fields

1👍

For using AuthorInline, you ned a foreignkey field in you Author model

ex:

class Author(models.Model):
    post = models.ForeignKey('Post')

This means one post may have multiple authors.

But here in your situation you have the correct model and fileds which have one author for one post, so you can remove AuthorInline.

And incase of Tag and Category, you are using many-to-many field, It will be good if you go through this documentation https://docs.djangoproject.com/en/dev/ref/contrib/admin/#working-with-many-to-many-models

You have to rewrite the CategoryInline and TagInline;

class TagInline(admin.StackedInline):
    model= Tag.post.through

class CategoryInline(admin.StackedInline):
    model = Category.post.through

0👍

This isn’t what inlines are for, and you don’t want them here.

Inlines are for the reverse relation: given an author, edit their details and enter all their books on the same page. Your foreign keys and many-to-many fields are best shown as simple widgets, which is what Django does by default; the author and category will be displayed as a dropdown allowing you to choose an item, and the tags will be displayed as a multi-select box.

You might also choose to register Book as an inline on the Author admin; that’s up to you.

0👍

Finally I made, what I wanted, the main gist is to make the category, author and tags choosable from the post page, so to do that, we need to add all the fields in the post model, which is the modified model

from django.db import models
from django.utils import timezone

class Author(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    email = models.EmailField(blank=True)
    bio = models.TextField()


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

class Category(models.Model):
    cat_name = models.CharField(max_length=50)

class Post(models.Model):
    '''post can have many categories 
    and categories can have many post
    author can have many post but post
    can have single author
    post can have many tags, and tags 
    can have many posts'''

    title = models.CharField('post title', max_length=200)
    body = models.TextField(default='', null=True)
    created_at = models.DateTimeField(auto_now_add=True, auto_now=False)
    updated_at = models.DateTimeField(auto_now_add=False, auto_now=True)
    author = models.ForeignKey(Author, verbose_name = "List of Author") #many to one relationship

    def __str__(self):
        return self.title

    #Generally many to many fields should into that model which is going to be edited.
    tags = models.ManyToManyField(Tag)
    categories = models.ManyToManyField(Category)

    class Meta:
        ordering = ['-created_at']
        verbose_name_plural = "Posteeees"


    # def post_status(self):
    # return timezone.now() - self.updated_at <= 1



#Recursive realation, we can define the foreignkey itself to the model  and this is called rrecursive realation
#

Leave a comment