from django.db import models from django.contrib import admin from django.db.models import fields class Unit(models.Model): class Meta: ordering = ('name',) name = fields.CharField(max_length=100) abbreviation = fields.CharField(max_length=10, blank=True, null=True) def __unicode__(self): return "{0} ({1})".format(self.name, self.abbreviation) class Recipe(models.Model): class Meta: ordering = ('title',) title = fields.CharField(max_length=100) slug = fields.SlugField(max_length=150) description = fields.TextField(blank=True, null=True) servings = fields.IntegerField(blank=True, null=True) instructions = fields.TextField() oven_temp = fields.IntegerField(blank=True, null=True) cook_time = fields.IntegerField(blank=True, null=True, help_text="In minutes") prep_time = fields.IntegerField(blank=True, null=True, help_text="In minutes") def __unicode__(self): return self.title class Ingredient(models.Model): class Meta: ordering = ('name',) name = fields.CharField(max_length=100, unique=True) def __unicode__(self): return self.name class RecipeIngredient(models.Model): ingredient = models.ForeignKey(Ingredient) units = models.ForeignKey(Unit) quantity = fields.FloatField() recipe = models.ForeignKey(Recipe) def __unicode__(self): return "{0} in {1}".format(self.ingredient.name, self.recipe.title) class UnitAdmin(admin.ModelAdmin): list_display = ('name', 'abbreviation') ordering = ('name',) class IngredientInline(admin.TabularInline): model = RecipeIngredient extra = 12 class RecipeAdmin(admin.ModelAdmin): list_display = ('title',) inlines = (IngredientInline,) search_fields = ('title',) prepopulated_fields = { "slug": ("title",) } class IngredientAdmin(admin.ModelAdmin): list_display = ('name',) search_fields = ('name',) try: admin.site.register(Unit, UnitAdmin) admin.site.register(Ingredient, IngredientAdmin) admin.site.register(Recipe, RecipeAdmin) except admin.sites.AlreadyRegistered: pass