向 django InlineFormSet 添加额外的字段
Adding extra fields to django InlineFormSet
假设我有 3 个模型:
棋手
锦标赛
参与人数
"Participation" 是另外两个的交汇点 table。
我在管理面板中使用以下 InlineFormSet 以显示参与模型中的一些字段。
from .models import Participation
class ParticipationInline(admin.TabularInline):
model = Participation
formset = ParticipationAdminFormset
class BaseParticipationAdminFormset(BaseInlineFormSet):
def clean(self):
# Some code
# ...
def _construct_form(self, i, **kwargs):
# Some code
# ...
ParticipationAdminFormset = inlineformset_factory(
Tournament, Participation,
formset=BaseParticipationAdminFormset,
fields=("chess_player_id", "tournament_id", "is_active")
)
问题:
如何包含 "Chess_Player" 模型中的任何字段,例如"first_name",进入上面的FormSet?
经过一番摸索,我设法解决了问题:
我所要做的就是添加只读字段并包含 chess_player 属性:
class ParticipationInline(admin.TabularInline):
model = Participation
formset = ParticipationAdminFormset
readonly_fields = ['chess_player_name']
def chess_player_name(self, instance):
return instance.chess_player.first_name
假设我有 3 个模型:
棋手
锦标赛
参与人数
"Participation" 是另外两个的交汇点 table。
我在管理面板中使用以下 InlineFormSet 以显示参与模型中的一些字段。
from .models import Participation
class ParticipationInline(admin.TabularInline):
model = Participation
formset = ParticipationAdminFormset
class BaseParticipationAdminFormset(BaseInlineFormSet):
def clean(self):
# Some code
# ...
def _construct_form(self, i, **kwargs):
# Some code
# ...
ParticipationAdminFormset = inlineformset_factory(
Tournament, Participation,
formset=BaseParticipationAdminFormset,
fields=("chess_player_id", "tournament_id", "is_active")
)
问题: 如何包含 "Chess_Player" 模型中的任何字段,例如"first_name",进入上面的FormSet?
经过一番摸索,我设法解决了问题: 我所要做的就是添加只读字段并包含 chess_player 属性:
class ParticipationInline(admin.TabularInline):
model = Participation
formset = ParticipationAdminFormset
readonly_fields = ['chess_player_name']
def chess_player_name(self, instance):
return instance.chess_player.first_name