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)
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")
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,
]
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')
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)!

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

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

Forloopsareidealwhenyouknowthenumberofiterationsinadvance,whilewhileloopsarebetterforsituationswhereyouneedtoloopuntilaconditionismet.Forloopsaremoreefficientandreadable,suitableforiteratingoversequences,whereaswhileloopsoffermorecontrolandareusefulf

Forloopsareusedwhenthenumberofiterationsisknowninadvance,whilewhileloopsareusedwhentheiterationsdependonacondition.1)Forloopsareidealforiteratingoversequenceslikelistsorarrays.2)Whileloopsaresuitableforscenarioswheretheloopcontinuesuntilaspecificcond

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

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

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

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


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

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

Hot Article

Hot Tools

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
Visual web development tools

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
Recommended: Win version, supports code prompts!

WebStorm Mac version
Useful JavaScript development tools
