diff options
Diffstat (limited to 'recipe/models.py')
-rw-r--r-- | recipe/models.py | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/recipe/models.py b/recipe/models.py new file mode 100644 index 0000000..8463447 --- /dev/null +++ b/recipe/models.py | |||
@@ -0,0 +1,90 @@ | |||
1 | from django.db import models | ||
2 | from django.contrib import admin | ||
3 | from django.db.models import fields | ||
4 | |||
5 | |||
6 | class Unit(models.Model): | ||
7 | |||
8 | class Meta: | ||
9 | ordering = ('name',) | ||
10 | |||
11 | name = fields.CharField(max_length=100) | ||
12 | abbreviation = fields.CharField(max_length=10, blank=True, null=True) | ||
13 | |||
14 | def __unicode__(self): | ||
15 | return "{0} ({1})".format(self.name, self.abbreviation) | ||
16 | |||
17 | |||
18 | class Recipe(models.Model): | ||
19 | |||
20 | class Meta: | ||
21 | ordering = ('title',) | ||
22 | |||
23 | title = fields.CharField(max_length=100) | ||
24 | slug = fields.SlugField(max_length=150) | ||
25 | description = fields.TextField(blank=True, null=True) | ||
26 | servings = fields.IntegerField(blank=True, null=True) | ||
27 | instructions = fields.TextField() | ||
28 | oven_temp = fields.IntegerField(blank=True, null=True) | ||
29 | cook_time = fields.IntegerField(blank=True, null=True) | ||
30 | prep_time = fields.IntegerField(blank=True, null=True) | ||
31 | |||
32 | |||
33 | def __unicode__(self): | ||
34 | return self.title | ||
35 | |||
36 | |||
37 | class Ingredient(models.Model): | ||
38 | |||
39 | class Meta: | ||
40 | ordering = ('name',) | ||
41 | |||
42 | name = fields.CharField(max_length=100, unique=True) | ||
43 | |||
44 | def __unicode__(self): | ||
45 | return self.name | ||
46 | |||
47 | |||
48 | class RecipeIngredient(models.Model): | ||
49 | |||
50 | ingredient = models.ForeignKey(Ingredient) | ||
51 | units = models.ForeignKey(Unit) | ||
52 | quantity = fields.FloatField() | ||
53 | recipe = models.ForeignKey(Recipe) | ||
54 | |||
55 | def __unicode__(self): | ||
56 | return "{0} in {1}".format(self.ingredient.name, self.recipe.title) | ||
57 | |||
58 | |||
59 | class UnitAdmin(admin.ModelAdmin): | ||
60 | |||
61 | list_display = ('name', 'abbreviation') | ||
62 | ordering = ('name',) | ||
63 | |||
64 | |||
65 | class IngredientInline(admin.TabularInline): | ||
66 | |||
67 | model = RecipeIngredient | ||
68 | extra = 12 | ||
69 | |||
70 | |||
71 | class RecipeAdmin(admin.ModelAdmin): | ||
72 | |||
73 | list_display = ('title',) | ||
74 | inlines = (IngredientInline,) | ||
75 | search_fields = ('title',) | ||
76 | prepopulated_fields = { "slug": ("title",) } | ||
77 | |||
78 | |||
79 | class IngredientAdmin(admin.ModelAdmin): | ||
80 | |||
81 | list_display = ('name',) | ||
82 | search_fields = ('name',) | ||
83 | |||
84 | |||
85 | try: | ||
86 | admin.site.register(Unit, UnitAdmin) | ||
87 | admin.site.register(Ingredient, IngredientAdmin) | ||
88 | admin.site.register(Recipe, RecipeAdmin) | ||
89 | except admin.sites.AlreadyRegistered: | ||
90 | pass | ||