Now adding a user adds the key linking the htsuser object to the auth_user object.
[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     date_hierarchy = "creation_date"
90     save_as = True
91     save_on_top = True
92     search_fields = (
93         'library_id',
94         'library_name',
95         'cell_line__cellline_name',
96         'library_species__scientific_name',
97         'library_species__common_name',
98     )
99     list_display = (
100         'library_id',
101         #'aligned_reads',
102         #'DataRun',
103         'library_name',
104         'public',
105         #'experiment_type',
106         #'organism',
107         #'antibody_name',
108         #'cell_line',
109         #'libtags',
110         #'made_for',
111         'affiliation',
112         #'made_by',
113         'undiluted_concentration',
114         'creation_date',
115         'stopping_point',
116         #'condition',
117
118     )
119     list_filter = (
120         'experiment_type', 
121         'library_species', 
122         'tags',
123         #'made_for',
124         'affiliations',
125         'made_by', 
126         'antibody',
127         'cell_line',
128         'condition',
129         'stopping_point',
130         'hidden')
131     list_display_links = ('library_id', 'library_name',)
132     fieldsets = (
133       (None, {
134         'fields': (
135           ('library_id','library_name','hidden'),
136           ('library_species'),
137           ('library_type', 'experiment_type', 'replicate'),
138           ('cell_line','condition','antibody'),)
139          }),
140          ('Creation Information:', {
141              'fields' : (('made_for', 'made_by', 'creation_date'), ('stopping_point', 'amplified_from_sample'), ('avg_lib_size','undiluted_concentration', 'ten_nM_dilution', 'successful_pM'), 'notes',)
142          }),
143          ('Library/Project Affiliation:', {
144              'fields' : (('affiliations'), ('tags'),)
145          }),
146          )
147     inlines = [
148       LaneLibraryInline,
149     ]
150
151     # some post 1.0.2 version of django has formfield_overrides 
152     # which would replace this code with:
153     # formfield_overrids = {
154     #   models.ManyToMany: { 'widget': widgets.FilteredSelectMultiple }
155     # }
156     def formfield_for_dbfield(self, db_field, **kwargs):
157       if db_field.name == 'affiliations':
158         kwargs['widget'] = widgets.FilteredSelectMultiple(db_field.verbose_name, (db_field.name in self.filter_vertical))
159       rv = super(LibraryOptions, self).formfield_for_dbfield(db_field, **kwargs)
160       print db_field.name, kwargs
161       return rv
162
163 class SpeciesOptions(admin.ModelAdmin):
164     fieldsets = (
165       (None, {
166           'fields': (('scientific_name', 'common_name'),)
167       }),
168     )
169
170 class TagOptions(admin.ModelAdmin):
171     list_display = ('tag_name', 'context')
172     fieldsets = ( 
173         (None, {
174           'fields': ('tag_name', 'context')
175           }),
176         )
177
178 admin.site.register(Affiliation, AffiliationOptions)
179 admin.site.register(Antibody, AntibodyOptions)
180 admin.site.register(Cellline, CelllineOptions)
181 admin.site.register(Condition, ConditionOptions)
182 admin.site.register(ExperimentType, ExperimentTypeOptions)
183 admin.site.register(HTSUser, HTSUserOptions)
184 admin.site.register(LibraryType, LibraryTypeOptions)
185 admin.site.register(Library, LibraryOptions)
186 admin.site.register(Species, SpeciesOptions)
187 admin.site.register(Tag, TagOptions)