Add a custom (inherited) user object named HTSUser to the samples table.
[htsworkflow.git] / htsworkflow / frontend / samples / admin.py
1 from django.contrib import admin
2 from django.contrib.admin import widgets
3 from django.contrib.admin.models import User
4 from django.contrib.auth.admin import UserAdmin
5 from django.db import models
6 from django.utils.translation import ugettext_lazy as _
7
8 from htsworkflow.frontend.samples.models import Antibody, Cellline, Condition, ExperimentType, HTSUser, LibraryType, Species, Affiliation, Library, Tag
9 from htsworkflow.frontend.experiments.models import Lane
10
11 class AffiliationOptions(admin.ModelAdmin):
12     list_display = ('name','contact','email')
13     fieldsets = (
14       (None, {
15           'fields': (('name','contact','email','users'))
16       }),
17     )
18
19     # some post 1.0.2 version of django has formfield_overrides 
20     # which would replace this code with:
21     # formfield_overrids = {
22     #   models.ManyToMany: { 'widget': widgets.FilteredSelectMultiple }
23     # }
24     def formfield_for_dbfield(self, db_field, **kwargs):
25       if db_field.name == 'users':
26         kwargs['widget'] = widgets.FilteredSelectMultiple(db_field.verbose_name, (db_field.name in self.filter_vertical))
27       rv = super(AffiliationOptions, self).formfield_for_dbfield(db_field, **kwargs)
28     #  print db_field.name, kwargs
29       return rv
30
31 class AntibodyOptions(admin.ModelAdmin):
32     search_fields = ('antigene','nickname','catalog','antibodies','source','biology','notes')
33     list_display = ('antigene','nickname','antibodies','catalog','source','biology','notes')
34     list_filter = ('antibodies','source')
35     fieldsets = (
36       (None, {
37           'fields': (('antigene','nickname','antibodies'),('catalog','source'),('biology'),('notes'))
38       }),
39      )
40
41 class CelllineOptions(admin.ModelAdmin):
42     list_display = ('cellline_name', 'nickname', 'notes')
43     search_fields = ('cellline_name', 'nickname', 'notes')
44     fieldsets = (
45       (None, {
46           'fields': (('cellline_name'),('notes'),)
47       }),
48      )
49
50 class ConditionOptions(admin.ModelAdmin):
51     list_display = (('condition_name'), ('notes'),)
52     fieldsets = (
53       (None, {
54           'fields': (('condition_name'),('nickname'),('notes'),)
55       }),
56      )
57
58 class ExperimentTypeOptions(admin.ModelAdmin):
59   model = ExperimentType
60   #list_display = ('name',)
61   #fieldsets = ( (None, { 'fields': ('name',) }), )
62
63 class HTSUserOptions(UserAdmin): pass
64
65 class LaneLibraryInline(admin.StackedInline):
66   model = Lane
67   extra = 0
68
69 class Library_Inline(admin.TabularInline):
70   model = Library
71
72 class LibraryTypeOptions(admin.ModelAdmin):
73     model = LibraryType
74
75 class LibraryOptions(admin.ModelAdmin):
76     date_hierarchy = "creation_date"
77     save_as = True
78     save_on_top = True
79     search_fields = (
80         'library_id',
81         'library_name',
82         'cell_line__cellline_name',
83         'library_species__scientific_name',
84         'library_species__common_name',
85     )
86     list_display = (
87         'library_id',
88         #'aligned_reads',
89         #'DataRun',
90         'library_name',
91         'public',
92         #'experiment_type',
93         #'organism',
94         #'antibody_name',
95         #'cell_line',
96         #'libtags',
97         #'made_for',
98         'affiliation',
99         #'made_by',
100         'undiluted_concentration',
101         'creation_date',
102         'stopping_point',
103         #'condition',
104
105     )
106     list_filter = (
107         'experiment_type', 
108         'library_species', 
109         'tags',
110         #'made_for',
111         'affiliations',
112         'made_by', 
113         'antibody',
114         'cell_line',
115         'condition',
116         'stopping_point',
117         'hidden')
118     list_display_links = ('library_id', 'library_name',)
119     fieldsets = (
120       (None, {
121         'fields': (
122           ('library_id','library_name','hidden'),
123           ('library_species'),
124           ('library_type', 'experiment_type', 'replicate'),
125           ('cell_line','condition','antibody'),)
126          }),
127          ('Creation Information:', {
128              'fields' : (('made_for', 'made_by', 'creation_date'), ('stopping_point', 'amplified_from_sample'), ('avg_lib_size','undiluted_concentration', 'ten_nM_dilution', 'successful_pM'), 'notes',)
129          }),
130          ('Library/Project Affiliation:', {
131              'fields' : (('affiliations'), ('tags'),)
132          }),
133          )
134     inlines = [
135       LaneLibraryInline,
136     ]
137
138     # some post 1.0.2 version of django has formfield_overrides 
139     # which would replace this code with:
140     # formfield_overrids = {
141     #   models.ManyToMany: { 'widget': widgets.FilteredSelectMultiple }
142     # }
143     def formfield_for_dbfield(self, db_field, **kwargs):
144       if db_field.name == 'affiliations':
145         kwargs['widget'] = widgets.FilteredSelectMultiple(db_field.verbose_name, (db_field.name in self.filter_vertical))
146       rv = super(LibraryOptions, self).formfield_for_dbfield(db_field, **kwargs)
147       print db_field.name, kwargs
148       return rv
149
150 class SpeciesOptions(admin.ModelAdmin):
151     fieldsets = (
152       (None, {
153           'fields': (('scientific_name', 'common_name'),)
154       }),
155     )
156
157 class TagOptions(admin.ModelAdmin):
158     list_display = ('tag_name', 'context')
159     fieldsets = ( 
160         (None, {
161           'fields': ('tag_name', 'context')
162           }),
163         )
164
165 admin.site.register(Affiliation, AffiliationOptions)
166 admin.site.register(Antibody, AntibodyOptions)
167 admin.site.register(Cellline, CelllineOptions)
168 admin.site.register(Condition, ConditionOptions)
169 admin.site.register(ExperimentType, ExperimentTypeOptions)
170 admin.site.register(HTSUser, HTSUserOptions)
171 admin.site.register(LibraryType, LibraryTypeOptions)
172 admin.site.register(Library, LibraryOptions)
173 admin.site.register(Species, SpeciesOptions)
174 admin.site.register(Tag, TagOptions)