Reputation: 1067
I have 2 models:
from django.db import models
class Category(models.Model):
icon = models.ImageField(upload_to = 'thing/icon/')
image = models.ImageField(upload_to = 'thing/image/')
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
title = models.CharField(max_length=200)
slug = models.SlugField()
desc = models.TextField(max_length=1000)
def __str__(self):
return self.title
def __unicode__(self):
return self.title
class Thing(models.Model):
icon = models.ImageField(upload_to = 'thing/icon/')
image = models.ImageField(upload_to = 'thing/image/')
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
title = models.CharField(max_length=200)
slug = models.SlugField()
desc = models.TextField(max_length=1000)
content = models.TextField()
category = models.ForeignKey('Category')
def __str__(self):
return self.title
def __unicode__(self):
return self.title
I am using Django's admin site for basic CRUD operations. I need to show all Things in Category if I am selecting an Category in admin.
Upvotes: 32
Views: 34095
Reputation: 6711
Few minutes ago, searching how to solve a similar problem, I finally found a solution.
You actually have to follow @Matteo Scotuzzi answer as well, then
Inside admin.py located in the app your created those models, you have to declare as follows right bellow @Matteo snippet:
admin.site.register(Category, CategoryAdmin)
and that would be enough to make all "Things" appear in "Category" inside your Django Administration respective page which is "Category".
Upvotes: 4
Reputation: 861
update admin.py
file like this.
from django.contrib import admin
from .views import Category, Thing
class CategoryAdmin(admin.ModelAdmin):
inlines = [
ThingInline,
]
class ThingInline(admin.TabularInline):
model = Thing
admin.site.register(Category, CategoryAdmin)
admin.site.register(Thing)
There are two inline options TabularInline
and StackedInline
Upvotes: 11
Reputation: 876
You can use "Inlines" to visualize and edit Things of a certain Category in the admin detail for that category:
In the admin.py file, create an Inline object for Thing (ThingInline) and modify your CategoryAdmin class to have an inline of type ThingInline like this:
...
class ThingInline(admin.TabularInline):
model = Thing
class CategoryAdmin(admin.ModelAdmin):
inlines = [
ThingInline,
]
...
For further details, this is the docs for admin inlines: https://docs.djangoproject.com/en/dev/ref/contrib/admin/#inlinemodeladmin-objects
Upvotes: 51