Skip to main content
 首页 » 编程设计

python之向 django InlineFormSet 添加额外的字段

2024年11月01日38luoye11

假设我有 3 个模型:
棋手
锦标赛
参与

“参与”是另外两个的联结表。

structure

我在管理面板中使用以下 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