I have a TicketMessage model that contains a foreign key to Ticket.
I wanted to have my TicketMessage message field appear on my Ticket admin panel as an inline.
I did succeeded in doing so however as shown in the image below for some reason by default it creates three message fields instead of one.
Would like to know how to make it so it shows only one message by default and the reason why this happens in the first place.
TicketMessage model
from django.db import models
from django.utils.translation import gettext as _
from painless.models import TimeStampMixin
class TicketMessage(TimeStampMixin):
class Meta:
verbose_name = _("Ticket Message"),
verbose_name_plural = ("Ticket Messages")
ticket = models.ForeignKey(
"Ticket",
default=False,
on_delete=models.PROTECT,
related_name="ticket_message",
help_text="Lorem ipsum"
)
message = models.TextField(
_("message"),
max_length=500,
help_text="Lorem ipsum",
)
def __str__(self):
return f"Ticket subject: {self.ticket}"
def __repr__(self):
return f"Ticket subject: {self.ticket}"
Ticket admin
from django.contrib import admin
from django.utils.translation import gettext_lazy as _
from desk.models import (
Ticket,
TicketMessage
)
class TicketMessageInline(admin.TabularInline):
model = TicketMessage
@admin.register(Ticket)
class TicketAdmin(admin.ModelAdmin):
list_display = (
'subject',
'status_choices',
'priority_choices',
'is_read',
'is_important',
'is_archive',
)
list_filter = (
'is_read',
'is_important',
'is_archive',
'status_choices',
)
inlines = (
TicketMessageInline,
)
filter_horizontal = (
"tags",
)
fieldsets = (
(_("Primary Informations"), {
'fields': (
'subject',
'message',
'status_choices',
'priority_choices',
)
}),
(_("Options"), {
'fields': (
'is_important',
'is_archive',
'is_read',
'is_duplicated',
)
}),
(_("Others"), {
'fields': (
'department',
'resolved_at',
)
}),
(_("Tags"), {
'fields': (
'tags',
)
}),
)
bug image Bug imag
Solution
As @Mojtaba pointed out, adding extra = 1 fixes the issue
from django.contrib import admin
from django.utils.translation import gettext_lazy as _
from desk.models import (
Ticket,
TicketMessage
)
class TicketMessageInline(admin.TabularInline):
model = TicketMessage
extra = 1
@admin.register(Ticket)
class TicketAdmin(admin.ModelAdmin):
list_display = (
'subject',
'status_choices',
'priority_choices',
'is_read',
'is_important',
'is_archive',
)
list_filter = (
'is_read',
'is_important',
'is_archive',
'status_choices',
)
inlines = (
TicketMessageInline,
)
filter_horizontal = (
"tags",
)
fieldsets = (
(_("Primary Informations"), {
'fields': (
'subject',
'message',
'status_choices',
'priority_choices',
)
}),
(_("Options"), {
'fields': (
'is_important',
'is_archive',
'is_read',
'is_duplicated',
)
}),
(_("Others"), {
'fields': (
'department',
'resolved_at',
)
}),
(_("Tags"), {
'fields': (
'tags',
)
}),
)