Coverage for family/admin.py: 100%

118 statements  

« prev     ^ index     » next       coverage.py v7.9.2, created at 2025-07-05 02:45 +0800

1from django.contrib import admin 

2from .models import ( 

3 Person, Location, Institution, Event, Story, Multimedia, 

4 Relationship, Health, Heritage, Planning, Career, Assets, Timeline 

5) 

6from .forms import ( 

7 PersonAdminForm, StoryAdminForm, EventAdminForm, MultimediaAdminForm, 

8 RelationshipAdminForm, HealthAdminForm, LocationAdminForm, InstitutionAdminForm 

9) 

10from .admin_mixins import FamilyAdminMixin 

11 

12 

13@admin.register(Person) 

14class PersonAdmin(admin.ModelAdmin): 

15 form = PersonAdminForm 

16 list_display = ['name', 'gender', 'birth_date', 'email', 'created_at'] 

17 list_filter = ['gender', 'created_at'] 

18 search_fields = ['name', 'email', 'bio'] 

19 readonly_fields = ['created_at', 'updated_at'] 

20 fieldsets = ( 

21 ('基本信息', { 

22 'fields': ('name', 'gender', 'birth_date', 'death_date', 'photo') 

23 }), 

24 ('联系方式', { 

25 'fields': ('email', 'phone') 

26 }), 

27 ('个人描述', { 

28 'fields': ('bio',) 

29 }), 

30 ('时间戳', { 

31 'fields': ('created_at', 'updated_at'), 

32 'classes': ('collapse',) 

33 }) 

34 ) 

35 

36 

37@admin.register(Location) 

38class LocationAdmin(admin.ModelAdmin): 

39 form = LocationAdminForm 

40 list_display = ['name', 'location_type', 'address', 'created_at'] 

41 list_filter = ['location_type', 'created_at'] 

42 search_fields = ['name', 'address', 'description'] 

43 readonly_fields = ['created_at'] 

44 

45 

46@admin.register(Institution) 

47class InstitutionAdmin(admin.ModelAdmin): 

48 form = InstitutionAdminForm 

49 list_display = ['name', 'institution_type', 'website', 'phone', 'created_at'] 

50 list_filter = ['institution_type', 'created_at'] 

51 search_fields = ['name', 'description', 'email'] 

52 readonly_fields = ['created_at'] 

53 

54 

55@admin.register(Event) 

56class EventAdmin(FamilyAdminMixin, admin.ModelAdmin): 

57 inline_create_fields = ['location', 'institution'] 

58 form = EventAdminForm 

59 list_display = ['name', 'event_type', 'start_date', 'location', 'created_at'] 

60 list_filter = ['event_type', 'start_date', 'created_at'] 

61 search_fields = ['name', 'description'] 

62 readonly_fields = ['created_at', 'updated_at'] 

63 filter_horizontal = ['participants'] 

64 date_hierarchy = 'start_date' 

65 fieldsets = ( 

66 ('事件信息', { 

67 'fields': ('name', 'event_type', 'description') 

68 }), 

69 ('时间地点', { 

70 'fields': ('start_date', 'end_date', 'location', 'institution') 

71 }), 

72 ('参与人员', { 

73 'fields': ('participants',) 

74 }), 

75 ('时间戳', { 

76 'fields': ('created_at', 'updated_at'), 

77 'classes': ('collapse',) 

78 }) 

79 ) 

80 

81 

82@admin.register(Story) 

83class StoryAdmin(FamilyAdminMixin, admin.ModelAdmin): 

84 inline_create_fields = ['location'] 

85 form = StoryAdminForm 

86 list_display = ['title', 'story_type', 'date_occurred', 'location', 'created_at'] 

87 list_filter = ['story_type', 'date_occurred', 'created_at'] 

88 search_fields = ['title', 'content'] 

89 readonly_fields = ['created_at', 'updated_at'] 

90 filter_horizontal = ['people', 'events'] 

91 date_hierarchy = 'created_at' 

92 fieldsets = ( 

93 ('故事信息', { 

94 'fields': ('title', 'story_type', 'content') 

95 }), 

96 ('时间地点', { 

97 'fields': ('date_occurred', 'location') 

98 }), 

99 ('相关人物事件', { 

100 'fields': ('people', 'events') 

101 }), 

102 ('时间戳', { 

103 'fields': ('created_at', 'updated_at'), 

104 'classes': ('collapse',) 

105 }) 

106 ) 

107 

108 

109@admin.register(Multimedia) 

110class MultimediaAdmin(FamilyAdminMixin, admin.ModelAdmin): 

111 inline_create_fields = ['location'] 

112 form = MultimediaAdminForm 

113 list_display = ['title', 'media_type', 'file', 'created_date', 'created_at'] 

114 list_filter = ['media_type', 'created_date', 'created_at'] 

115 search_fields = ['title', 'description'] 

116 readonly_fields = ['created_at', 'updated_at', 'file_size'] 

117 filter_horizontal = ['people', 'events', 'stories'] 

118 fieldsets = ( 

119 ('媒体信息', { 

120 'fields': ('title', 'media_type', 'description', 'file') 

121 }), 

122 ('元数据', { 

123 'fields': ('file_size', 'created_date', 'location') 

124 }), 

125 ('相关内容', { 

126 'fields': ('people', 'events', 'stories') 

127 }), 

128 ('时间戳', { 

129 'fields': ('created_at', 'updated_at'), 

130 'classes': ('collapse',) 

131 }) 

132 ) 

133 

134 

135@admin.register(Relationship) 

136class RelationshipAdmin(FamilyAdminMixin, admin.ModelAdmin): 

137 inline_create_fields = ['person_from', 'person_to'] 

138 form = RelationshipAdminForm 

139 list_display = ['person_from', 'relationship_type', 'person_to', 'start_date', 'created_at'] 

140 list_filter = ['relationship_type', 'start_date', 'created_at'] 

141 search_fields = ['person_from__name', 'person_to__name', 'description'] 

142 readonly_fields = ['created_at'] 

143 

144 

145@admin.register(Health) 

146class HealthAdmin(FamilyAdminMixin, admin.ModelAdmin): 

147 inline_create_fields = ['person', 'institution'] 

148 form = HealthAdminForm 

149 list_display = ['person', 'record_type', 'title', 'date', 'is_hereditary', 'created_at'] 

150 list_filter = ['record_type', 'is_hereditary', 'date', 'created_at'] 

151 search_fields = ['person__name', 'title', 'description', 'doctor'] 

152 readonly_fields = ['created_at'] 

153 date_hierarchy = 'date' 

154 

155 

156@admin.register(Heritage) 

157class HeritageAdmin(FamilyAdminMixin, admin.ModelAdmin): 

158 inline_create_fields = ['origin_person'] 

159 list_display = ['title', 'heritage_type', 'origin_person', 'importance', 'created_at'] 

160 list_filter = ['heritage_type', 'importance', 'created_at'] 

161 search_fields = ['title', 'description'] 

162 readonly_fields = ['created_at'] 

163 filter_horizontal = ['inheritors', 'stories', 'events'] 

164 

165 

166@admin.register(Planning) 

167class PlanningAdmin(FamilyAdminMixin, admin.ModelAdmin): 

168 inline_create_fields = [] 

169 list_display = ['title', 'time_range', 'priority', 'status', 'target_date', 'created_at'] 

170 list_filter = ['time_range', 'priority', 'status', 'created_at'] 

171 search_fields = ['title', 'description', 'expected_outcome'] 

172 readonly_fields = ['created_at', 'updated_at'] 

173 filter_horizontal = ['involved_people'] 

174 date_hierarchy = 'target_date' 

175 

176 

177@admin.register(Career) 

178class CareerAdmin(FamilyAdminMixin, admin.ModelAdmin): 

179 inline_create_fields = ['person', 'institution'] 

180 list_display = ['person', 'career_type', 'title', 'institution', 'start_date', 'end_date'] 

181 list_filter = ['career_type', 'start_date', 'created_at'] 

182 search_fields = ['person__name', 'title', 'description', 'achievements'] 

183 readonly_fields = ['created_at'] 

184 filter_horizontal = ['events'] 

185 date_hierarchy = 'start_date' 

186 

187 

188@admin.register(Assets) 

189class AssetsAdmin(FamilyAdminMixin, admin.ModelAdmin): 

190 inline_create_fields = [] 

191 list_display = ['name', 'asset_type', 'legal_status', 'estimated_value', 'importance', 'created_at'] 

192 list_filter = ['asset_type', 'legal_status', 'importance', 'created_at'] 

193 search_fields = ['name', 'description', 'location'] 

194 readonly_fields = ['created_at', 'updated_at'] 

195 filter_horizontal = ['owners', 'related_documents', 'plans'] 

196 

197 

198@admin.register(Timeline) 

199class TimelineAdmin(FamilyAdminMixin, admin.ModelAdmin): 

200 inline_create_fields = [] 

201 list_display = ['title', 'timeline_type', 'date', 'end_date', 'importance', 'created_at'] 

202 list_filter = ['timeline_type', 'importance', 'date', 'created_at'] 

203 search_fields = ['title', 'description', 'historical_context'] 

204 readonly_fields = ['created_at'] 

205 filter_horizontal = ['people', 'events', 'stories'] 

206 date_hierarchy = 'date'