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