Skip to content

Commit 9768f92

Browse files
committed
first draft of using class-based views
1 parent 26531aa commit 9768f92

File tree

9 files changed

+206
-4
lines changed

9 files changed

+206
-4
lines changed

sim/seedbank/forms.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from django import forms
2+
from django.forms.models import inlineformset_factory
3+
4+
from seedbank.models import Seed, Location
5+
6+
# inlineformset_factory creates a Class from a parent model (Seed)
7+
# to a child model (Location)
8+
# SeedLocationFormSet = inlineformset_factory(
9+
# Seed,
10+
# Location,
11+
# )
12+
13+
14+
class SeedForm(forms.ModelForm):
15+
16+
class Meta:
17+
model = Seed

sim/seedbank/models.py

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,47 +3,71 @@
33
# Create your models here.
44

55
class Location(models.Model):
6+
"""
7+
TODO: Description of class
8+
"""
69
location_name = models.CharField(max_length=45, blank=False)
710
location_code = models.CharField(max_length=45, blank=False)
811
location_type = models.CharField(max_length=45)
912

1013

1114
class Family(models.Model):
15+
"""
16+
TODO: Description of class
17+
"""
1218
family = models.CharField(max_length=45, blank=False)
1319

1420

1521
class ScientificName(models.Model):
22+
"""
23+
TODO: Description of class
24+
"""
1625
scientific_name = models.CharField(max_length=45, blank=False)
1726

1827

1928
class Variety(models.Model):
29+
"""
30+
TODO: Description of class
31+
"""
2032
variety = models.CharField(max_length=45, blank=False)
2133
seed_color = models.CharField(max_length=75)
22-
parts_to_harvest = models.TextField()
34+
parts_to_harvest = models.TextField()
2335
unique_characteristics = models.TextField()
2436
planting_intructions = models.TextField()
2537

2638
scientific_name = models.ForeignKey(ScientificName)
2739

2840

2941
class Germination(models.Model):
42+
"""
43+
TODO: Description of class
44+
"""
3045
germ_rate = models.DecimalField(decimal_places=2, max_digits=2, blank=False)
3146
germ_date = models.DateField(blank=False)
3247
germ_method = models.TextField()
3348

3449

3550
class CommonName(models.Model):
51+
"""
52+
TODO: Description of class
53+
"""
3654
common_name = models.CharField(max_length=45)
3755
langs = (("English", "English"), ("Thai", "Thai"))
3856
language = models.CharField(max_length=45, choices=langs, default="English")
3957
scientific_name = models.ForeignKey(ScientificName)
4058

4159

4260
class SupplierType(models.Model):
61+
"""
62+
TODO: Description of class
63+
"""
4364
supplier_type = models.CharField(max_length=45)
4465

4566

4667
class Supplier(models.Model):
68+
"""
69+
TODO: Description of class
70+
"""
4771
supplier_name = models.CharField(max_length=45, blank=False)
4872
contact_first_name = models.CharField(max_length=45)
4973
contact_last_name = models.CharField(max_length=45)
@@ -64,17 +88,22 @@ class Supplier(models.Model):
6488

6589

6690
class Seed(models.Model):
91+
"""
92+
TODO: Description of class
93+
"""
6794
accession_num = models.CharField(max_length=8, blank=False)
6895
lot_num = models.CharField(max_length=5, blank=False)
6996
aquisition_date = models.DateField(blank=False)
70-
cost = models.DecimalField(decimal_places=2, max_digits=6, blank=False)
97+
cost = models.DecimalField(decimal_places=2, max_digits=6, blank=False)
7198

7299
aquisition_location = models.ForeignKey(Location)
73100
family = models.ForeignKey(Family)
74101
variety = models.ForeignKey(Variety)
75102
scientific_name = models.ForeignKey(ScientificName)
76103
germination = models.ForeignKey(Germination)
77104

78-
# I think this one is supposed to be here... ?
79-
supplier = models.ForeignKey(Supplier)
105+
# I think this one is supposed to be here... ?
106+
supplier = models.ForeignKey(Supplier)
80107

108+
def get_absolute_url(self):
109+
return reverse('seeds-view', kwargs={'pk': self.id})
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<h1>Delete Seed</h1>
2+
3+
<p>Are you sure you want to delete the seed {{ seed }}?</p>
4+
5+
<form action="{% url "seeds-delete" pk=seed.id %}" method="POST">
6+
{% csrf_token %}
7+
8+
<input type="submit" value="Yes, delete." />
9+
<a href="{% url "seeds-list" %}">No, cancel.</a>
10+
</form>
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{% if seed.id %}
2+
<h1>Edit Seed</h1>
3+
{% else %}
4+
<h1>Add Seed</h1>
5+
{% endif %}
6+
7+
<form action="{{ action }}" method="POST">
8+
{% csrf_token %}
9+
<ul>
10+
{{ form.as_ul }}
11+
</ul>
12+
<input type="submit" value="Save" />
13+
</form>
14+
15+
{% if seed.id %}
16+
<a href="{% url "seeds-delete" pk=seed.id %}">Delete</a>
17+
{% endif %}
18+
19+
<a href="{% url "seeds-list" %}">Back to list</a>

sim/seedbank/templates/seed.html

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<h1>{{ seed }}</h1>
2+
3+
<p>Accession number: {{ seed.accession_num }}</p>
4+
<p>Lot number: {{ seed.lot_num }}</p>
5+
<p>Acquisition date: {{ seed.aquisition_date }}</p>
6+
<p>Cost: {{ seed.cost }}</p>
7+
<p>Location: {{ seed.aquisition_location }}</p>
8+
<p>Family: {{ seed.family }}</p>
9+
<p>Variety: {{ seed.variety }}</p>
10+
<p>Scientific name: {{ seed.scientific_name }}</p>
11+
<p>Germination: {{ seed.germination }}</p>
12+
<p>Supplier: {{ seed.supplier }}</p>
13+
14+
{# <ul>
15+
{% for location in seed.location_set.all %}
16+
<li>{{ location.name }}<br />
17+
{{ location.code }}<br />
18+
{{ location.type }}
19+
</li>
20+
{% endfor %}
21+
</ul> #}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<h1>Seeds</h1>
2+
3+
<ul>
4+
{% for seed in object_list %}
5+
<li><a href="{{ seed.get_absolute_url }}">{{ seed }}</a>
6+
(<a href="{% url "seeds-edit" pk=seed.id %}">edit</a>)
7+
</li>
8+
{% endfor %}
9+
</ul>
10+
11+
<a href="{% url 'seeds-new' %}">add seed</a>

sim/seedbank/urls.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
from django.conf.urls import patterns, url
2+
3+
from seedbank import views
4+
5+
urlpatterns = patterns('',
6+
7+
url(r'^$', views.ListSeedView.as_view(),
8+
name='seeds-list',),
9+
url(r'^new$', views.CreateSeedView.as_view(),
10+
name='seeds-new',),
11+
url(r'^edit/(?P<pk>\d+)/$', views.UpdateSeedView.as_view(),
12+
name='seeds-edit',),
13+
url(r'^delete/(?P<pk>\d+)/$', views.DeleteSeedView.as_view(),
14+
name='seeds-delete',),
15+
url(r'^(?P<pk>\d+)/$', views.SeedView.as_view(),
16+
name='seeds-view',),
17+
# url(r'^edit/(?P<pk>\d+)/locations$', views.EditSeedLocationView.as_view(),
18+
# name='seeds-edit-locations',),
19+
20+
)

sim/seedbank/views.py

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,73 @@
11
# Create your views here.
2+
3+
from django.views.generic import (
4+
ListView,
5+
CreateView,
6+
UpdateView,
7+
DeleteView,
8+
DetailView,
9+
)
10+
11+
from django.core.urlresolvers import reverse
12+
13+
from seedbank.models import Seed
14+
from seedbank import forms
15+
16+
17+
class ListSeedView(ListView):
18+
model = Seed
19+
template_name = 'seed_list.html'
20+
21+
22+
class CreateSeedView(CreateView):
23+
model = Seed
24+
template_name = 'edit_seed.html'
25+
form_class = forms.SeedForm
26+
27+
def get_success_url(self):
28+
return reverse('seeds-list')
29+
30+
def get_context_data(self, **kwargs):
31+
context = super(CreateSeedView, self).get_context_data(**kwargs)
32+
context['action'] = reverse('seeds-new')
33+
34+
return context
35+
36+
37+
class UpdateSeedView(UpdateView):
38+
model = Seed
39+
template_name = 'edit_seed.html'
40+
form_class = forms.SeedForm
41+
42+
def get_success_url(self):
43+
return reverse('seeds-list')
44+
45+
def get_context_data(self, **kwargs):
46+
context = super(UpdateSeedView, self).get_context_data(**kwargs)
47+
context['action'] = reverse('seeds-edit',
48+
kwargs={'pk': self.get_object().id})
49+
50+
return context
51+
52+
53+
class DeleteSeedView(DeleteView):
54+
model = Seed
55+
template_name = 'delete_seed.html'
56+
57+
def get_success_url(self):
58+
return reverse('seeds-list')
59+
60+
61+
class SeedView(DetailView):
62+
model = Seed
63+
template_name = 'seed.html'
64+
65+
66+
# class EditSeedLocationView(UpdateView):
67+
# model = Seed
68+
# template_name = 'edit_location.html'
69+
# form_class = forms.SeedLocationFormSet
70+
71+
# def get_success_url(self):
72+
# # redirect to the Seed view
73+
# return self.get_object().get_absolute_url()

sim/sim/urls.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
from django.contrib import admin
66
admin.autodiscover()
77

8+
#from seedbank import urls as seedbank_urls
9+
810
urlpatterns = patterns('',
911
url(r'^$', TemplateView.as_view(template_name='base.html')),
1012

@@ -17,4 +19,5 @@
1719

1820
# Uncomment the next line to enable the admin:
1921
url(r'^admin/', include(admin.site.urls)),
22+
url(r'^seeds/', include('seedbank.urls')),
2023
)

0 commit comments

Comments
 (0)