search
HomeBackend DevelopmentPython TutorialDjangoadminsite(三)InlineModelAdmin

InlineModelAdmin

class InlineModelAdmin
class TabularInline
class StackedInline

For example, there are two Models:

from django.db import models

class Author(models.Model):
name = models.CharField(max_length=100)

class Book(models.Model):
author = models.ForeignKey(Author)
title = models.CharField(max_length=100)

If you want to edit book on the Author page:

from django.contrib import admin

class BookInline(admin.TabularInline):
model = Book

class AuthorAdmin(admin.ModelAdmin):
inlines = [
, BookInline,
]

Django provides two subclasses of InlineModelAdmin:

TabularInline
StackedInline
The difference is the template used.

InlineModelAdmin options

The options common to InlineModelAdmin and ModelAdmin are:

form
fieldsets
fields
formfield_overrides
exclude
filter_horizontal
filter_vertical
ordering
PRepopulated_fields
get_queryset()
radio_fields
readonly_fields
raw_id_fields
formfield_for_choice_field()
formfield_for_foreignkey ()
formfield_for_manytomany()
has_add_permission()
has_change_permission()
has_delete_permission()

Additional options are:

InlineModelAdmin.model
The model used inline, required.

InlineModelAdmin.fk_name
The name of the model, used when there are multiple foreign keys.

InlineModelAdmin.formset
Default BaseInlineFormSet.

InlineModelAdmin.form
Default ModelForm. Passed to inlineformset_factory() when creating the formset.

InlineModelAdmin.extra
Extra number of inline.

InlineModelAdmin.get_extra() also returns the extra number of inline.

InlineModelAdmin.max_num
The maximum number that can be displayed.

InlineModelAdmin.get_max_num() also returns this number.

InlineModelAdmin.min_num
The minimum number that can be displayed.

InlineModelAdmin.get_min_num() also returns this number.

InlineModelAdmin.raw_id_fields
Same as ModelAdmin.

class BookInline(admin.TabularInline):
model = Book
raw_id_fields = ("pages",)

InlineModelAdmin.template
The template used.

InlineModelAdmin.verbose_name
overrides verbose_name in meta class.

InlineModelAdmin.verbose_name_plural
Same as above

InlineModelAdmin.can_delete
Defaults to True.

InlineModelAdmin.get_formset(request, obj=None, **kwargs)
Refer to ModelAdmin.get_formsets_with_inlines.

InlineModelAdmin.get_extra(request, obj=None, **kwargs)

class BinaryTreeAdmin(admin.TabularInline):
model = BinaryTree

def get_extra(self, request, obj=None, **kwargs):
extra = 2
if obj:
return extra - obj.binarytree_set.count()
return extra

InlineModelAdmin.get_max_num(request , obj=None, **kwargs)

class BinaryTreeAdmin(admin.TabularInline):
model = BinaryTree

def get_max_num(self, request, obj=None, **kwargs):
max_num = 10
if obj .parent :
              return max_num - 5
                                                  using using using  .             out out through off through off ’s ’ through ’ s ’ through through ‐ ‐ ‐ ‐‐ ‐ back , return max_num to 5
‐ ‐ ‐ ‐ return max_num


InlineModelAdmin.get_min_num(request, obj=None, **kwargs)

See above.

The case of multiple ForeignKeys linking to the same Model

If there are multiple foreign keys:


from django.db import models

class Friendship(models.Model):
to_person = models.ForeignKey(Person, related_name= "friends")
from_person = models.ForeignKey(Person, related_name="from_friends")

Show one of them:


from django.contrib import admin
from myapp.models import Friendship

class FriendshipInline(admin.TabularInline) :
model = Friendship
fk_name = "to_person"

class PersonAdmin(admin.ModelAdmin):
inlines = [
FriendshipInline,
]

Working with many-to-many models

model example :


from django .db import models

class Person(models.Model):
name = models.CharField(max_length=128)

class Group(models.Model):
name = models.CharField(max_length=128)
members = models .ManyToManyField(Person, related_name='groups')

inlines display: 🎜

from django.contrib import admin

class MembershipInline(admin.TabularInline):
model = Group.members.through

class PersonAdmin(admin.ModelAdmin):
inlines = [
MembershipInline,
]

class GroupAdmin(admin .ModelAdmin):
inlines = [
MembershipInline,
]
exclude = ('members',)

Note:

First, the MembershipInline class points to Group.members.through. The through attribute points to the management of the many- to-many relationship database.

Second, the GroupAdmin must exclude the members field.

Working with many-to-many intermediary models

Explicitly indicate the intermediate model example:

from django.db import models

class Person(models.Model):
name = models.CharField(max_length=128)

class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(Person, through='Membership')

class Membership(models.Model):
person = models.ForeignKey(Person)
group = models.ForeignKey(Group)
date_joined = models.DateField()
invite_reason = models.CharField(max_length =64)

First step:

class MembershipInline(admin.TabularInline):
model = Membership
extra = 1

Second step:

class PersonAdmin(admin.ModelAdmin):
inlines = (MembershipInline ,)

class GroupAdmin(admin.ModelAdmin):
inlines = (MembershipInline,)

Step 3:

admin.site.register(Person, PersonAdmin)
admin.site.register(Group, GroupAdmin)

Using generic relations as an inline

An example of inline with generically related objects:

from django.db import models
from django.contrib.contenttypes.fields import GenericForeignKey

class Image(models.Model):
image = models.ImageField(upload_to="images")
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey("content_type", "object_id")

class Product(models.Model):
name = models.CharField(max_length=100)

If you want to edit the Image instance on the Product add/change page, you can use GenericTabularInline or GenericStackedInline:

from django.contrib import admin
from django.contrib.contenttypes.admin import GenericTabularInline

from myproject.myapp.models import Image, Product

class ImageInline(GenericTabularInline):
model = Image

class ProductAdmin(admin.ModelAdmin):
inlines = [
ImageInline,
]

admin.site .register(Product, ProductAdmin)

The above is the content of Djangoadminsite (3) InlineModelAdmin. For more related content, please pay attention to the PHP Chinese website (www.php.cn)!


Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Python: A Deep Dive into Compilation and InterpretationPython: A Deep Dive into Compilation and InterpretationMay 12, 2025 am 12:14 AM

Pythonusesahybridmodelofcompilationandinterpretation:1)ThePythoninterpretercompilessourcecodeintoplatform-independentbytecode.2)ThePythonVirtualMachine(PVM)thenexecutesthisbytecode,balancingeaseofusewithperformance.

Is Python an interpreted or a compiled language, and why does it matter?Is Python an interpreted or a compiled language, and why does it matter?May 12, 2025 am 12:09 AM

Pythonisbothinterpretedandcompiled.1)It'scompiledtobytecodeforportabilityacrossplatforms.2)Thebytecodeistheninterpreted,allowingfordynamictypingandrapiddevelopment,thoughitmaybeslowerthanfullycompiledlanguages.

For Loop vs While Loop in Python: Key Differences ExplainedFor Loop vs While Loop in Python: Key Differences ExplainedMay 12, 2025 am 12:08 AM

Forloopsareidealwhenyouknowthenumberofiterationsinadvance,whilewhileloopsarebetterforsituationswhereyouneedtoloopuntilaconditionismet.Forloopsaremoreefficientandreadable,suitableforiteratingoversequences,whereaswhileloopsoffermorecontrolandareusefulf

For and While loops: a practical guideFor and While loops: a practical guideMay 12, 2025 am 12:07 AM

Forloopsareusedwhenthenumberofiterationsisknowninadvance,whilewhileloopsareusedwhentheiterationsdependonacondition.1)Forloopsareidealforiteratingoversequenceslikelistsorarrays.2)Whileloopsaresuitableforscenarioswheretheloopcontinuesuntilaspecificcond

Python: Is it Truly Interpreted? Debunking the MythsPython: Is it Truly Interpreted? Debunking the MythsMay 12, 2025 am 12:05 AM

Pythonisnotpurelyinterpreted;itusesahybridapproachofbytecodecompilationandruntimeinterpretation.1)Pythoncompilessourcecodeintobytecode,whichisthenexecutedbythePythonVirtualMachine(PVM).2)Thisprocessallowsforrapiddevelopmentbutcanimpactperformance,req

Python concatenate lists with same elementPython concatenate lists with same elementMay 11, 2025 am 12:08 AM

ToconcatenatelistsinPythonwiththesameelements,use:1)the operatortokeepduplicates,2)asettoremoveduplicates,or3)listcomprehensionforcontroloverduplicates,eachmethodhasdifferentperformanceandorderimplications.

Interpreted vs Compiled Languages: Python's PlaceInterpreted vs Compiled Languages: Python's PlaceMay 11, 2025 am 12:07 AM

Pythonisaninterpretedlanguage,offeringeaseofuseandflexibilitybutfacingperformancelimitationsincriticalapplications.1)InterpretedlanguageslikePythonexecuteline-by-line,allowingimmediatefeedbackandrapidprototyping.2)CompiledlanguageslikeC/C transformt

For and While loops: when do you use each in python?For and While loops: when do you use each in python?May 11, 2025 am 12:05 AM

Useforloopswhenthenumberofiterationsisknowninadvance,andwhileloopswheniterationsdependonacondition.1)Forloopsareidealforsequenceslikelistsorranges.2)Whileloopssuitscenarioswheretheloopcontinuesuntilaspecificconditionismet,usefulforuserinputsoralgorit

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

SecLists

SecLists

SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

Dreamweaver Mac version

Dreamweaver Mac version

Visual web development tools

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

SublimeText3 English version

SublimeText3 English version

Recommended: Win version, supports code prompts!

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools