def edit_recipe(request, id): recipe = get_object_or_404(Recipe, id=id) tag_prepop = Tag.objects.get_for_object(recipe) tool_prepop = recipe.tools.all() if recipe.user != request.user and request.user.is_superuser == False: return render_to_response('recipes/forbidden.html', context_instance=RequestContext(request)) if request.method == 'POST': form = RecipeForm(request.POST, request.FILES, instance=recipe) formset = RecipeIngredientsFormset(request.POST, request.FILES, instance=recipe) if form.is_valid(): recipe = form.save(commit=False) if formset.is_valid(): formset.save() recipe.save() return render_to_response( 'recipes/view_recipe.html', { 'recipe': recipe, }, context_instance=RequestContext(request)) else: form = RecipeForm(instance=recipe) formset = RecipeIngredientsFormset(instance=recipe) return render_to_response('recipes/edit_recipe.html', { 'recipe': recipe, 'form': form, 'formset': formset, 'tag_prepop': tag_prepop, 'tool_prepop': tool_prepop }, context_instance=RequestContext(request))
def recipe(request,user=None, slug=None): '''used to create or edit a recipe''' IngFormSet = inlineformset_factory(Recipe, Ingredient, extra=15, formset=IngItemFormSet) #create the ingredient form with 15 empty fields if user and slug: #must be editing a recipe recipe_inst = get_object_or_404(Recipe, author__username=request.user.username, slug=slug) else: recipe_inst = Recipe() if request.method=='POST': form = RecipeForm(data = request.POST, files = request.FILES,instance=recipe_inst) formset = IngFormSet(request.POST, instance=recipe_inst) if form.is_valid() and formset.is_valid(): new_recipe = form.save() instances = formset.save(commit=False)#save the ingredients seperatly for instance in instances: instance.recipe_id = new_recipe.id #set the recipe id foregin key to the this recipe id instance.save() form.save(commit=False) return redirect(new_recipe.get_absolute_url()) else: form = RecipeForm(instance=recipe_inst) form.fields['related'].queryset = Recipe.objects.filter(author__username=request.user.username).exclude(related = F('id')).filter(related__isnull=True).order_by('-pub_date')[:5] if recipe_inst.id: #if we are editing an existing recipe disable the title field so it can't be changed form.fields['title'].widget.attrs['readonly'] = True formset = IngFormSet(instance=recipe_inst) return render_to_response('recipe/recipe_form.html', {'form': form, 'formset' : formset,}, context_instance=RequestContext(request))
def correct_recipe(request): if request.method == 'POST': form = RecipeForm(request.POST, request.FILES) if form.is_valid(): recipe = form.save(commit=False) recipe.user = request.user recipe.save() junk_id = request.POST['junkid'] junk = JunkRecipe.objects.get(id = junk_id) formset = RecipeIngredientsFormset(request.POST, request.FILES, instance=recipe) if formset.is_valid(): formset.save() recipe.save() junk.is_added = True junk.derived_recipe = recipe junk.save() return render_to_response('recipes/view_recipe.html', {'recipe': recipe,}, context_instance=RequestContext(request)) else: recipe.delete() else: junk_id = request.POST['junkid'] junk = JunkRecipe.objects.get(id = junk_id) formset = RecipeIngredientsFormset(request.POST, request.FILES) else: junk = random.choice(JunkRecipe.objects.filter(is_added = False)) form = RecipeForm() formset = RecipeIngredientsFormset() return render_to_response('recipes/correct_recipe.html', {'form': form, 'formset': formset, 'junk': junk}, context_instance=RequestContext(request))
def add_recipe(request): if request.method == 'POST': form = RecipeForm(request.POST, request.FILES) if form.is_valid(): recipe = form.save(commit=False) recipe.user = request.user recipe.save() formset = RecipeIngredientsFormset(request.POST, request.FILES, instance=recipe) if formset.is_valid(): formset.save() recipe.save() return render_to_response( 'recipes/view_recipe.html', { 'recipe': recipe, }, context_instance=RequestContext(request)) else: recipe.delete() else: formset = RecipeIngredientsFormset(request.POST, request.FILES) else: form = RecipeForm() formset = RecipeIngredientsFormset() return render_to_response('recipes/add_recipe.html', { 'form': form, 'formset': formset }, context_instance=RequestContext(request))
def add_recipe(request): if request.method == 'POST': recipe_form = RecipeForm(request.POST, request.FILES) hop_type_form = HopTypeForm(request.POST) hop_counter = request.POST.get('hop-counter') hop_counter = int(hop_counter) + 1 if recipe_form.is_valid(): recipe = recipe_form.save() for i in range(hop_counter): if i == 0: hop_type_dict = {'hop_type': request.POST.get('hop_type')} else: hop_type_dict = { 'hop_type': request.POST.get('hop_type_%d' % i) } hop_type_form = HopTypeForm(hop_type_dict) if hop_type_form.is_valid(): hop = hop_type_form.save(commit=False) hop.recipe = recipe hop.save() return HttpResponseRedirect('/thanks/') else: recipe_form = RecipeForm() hop_type_form = HopTypeForm() return render(request, 'add-recipe.html', { 'hop_type_form': hop_type_form, 'recipe_form': recipe_form })
def edit(request, rpID): rp = get_object_or_404(Recipe, pk=rpID, ruser=request.user) if not request.user.is_active: HttpResponseForbidden() if request.method == "POST": form = RecipeForm(request.POST, request.FILES) if form.is_valid(): rp = form.save() create_thumb(rp) return HttpResponseRedirect(reverse("recipedia.views.create_edit", args=[rp.pk])) else: form = RecipeForm() return render_to_response("new_recipe.html", {"form": form}, context_instance=RequestContext(request))
def index(request): if request.method == 'POST': form = RecipeForm(request.POST) if form.is_valid(): recipes = Recipe.objects.all().order_by("name") for filter_method in FILTER_METHODS: recipes = filter_method(form, recipes) return render(request, 'home.html', {'form': form, 'recipe_list': recipes}) else: reset = request.GET.get('reset', None) != None load(reset=reset) form = RecipeForm return render_to_response('home.html', {'form': form, 'recipe_list': Recipe.objects.all().order_by("name")}, context_instance=RequestContext(request))
def create(request): # the 1st step of 3 phases recipe creation if not request.user.is_active: HttpResponseForbidden() if request.method == "POST": form = RecipeForm(request.POST, request.FILES) if form.is_valid(): rp = form.save(commit=False) data = form.cleaned_data rp.activation_key = activation_key(request) rp.ruser = request.user rp.save() create_thumb(rp) return HttpResponseRedirect(reverse("recipedia.views.create_edit", args=[rp.pk])) else: form = RecipeForm() return render_to_response("new_recipe.html", {"form": form}, context_instance=RequestContext(request))
def recipe(request, user=None, slug=None): """used to create or edit a recipe""" IngFormSet = inlineformset_factory( Recipe, Ingredient, extra=15, formset=IngItemFormSet ) # create the ingredient form with 15 empty fields if user and slug: # must be editing a recipe recipe_inst = get_object_or_404(Recipe, author__username=request.user.username, slug=slug) else: recipe_inst = Recipe() if request.method == 'POST': form = RecipeForm(data=request.POST, files=request.FILES, instance=recipe_inst) formset = IngFormSet(request.POST, instance=recipe_inst) if form.is_valid() and formset.is_valid(): new_recipe = form.save() instances = formset.save( commit=False) # save the ingredients seperatly for instance in instances: instance.recipe_id = new_recipe.id # set the recipe id foregin key to the this recipe id instance.save() form.save(commit=False) return redirect(new_recipe.get_absolute_url()) else: form = RecipeForm(instance=recipe_inst) if not recipe_inst.related: # if the related field has not been set on a recipe or it is a new recipe populate the drop down otherwise use the value that is already set form.fields['related'].queryset = Recipe.objects.filter( author__username=request.user.username).exclude( related=F('id')).filter( related__isnull=True).order_by('-pub_date') if recipe_inst.id: # if we are editing an existing recipe disable the title field so it can't be changed form.fields['title'].widget.attrs['readonly'] = True formset = IngFormSet(instance=recipe_inst) return render_to_response('recipe/recipe_form.html', { 'form': form, 'formset': formset, }, context_instance=RequestContext(request))
def add(request): def storeInS3(recipe_id, filename, content): conn = S3Connection(settings.AWS_ACCESS_KEY_ID, settings.AWS_SECRET_ACCESS_KEY) b = conn.create_bucket(settings.S3BUCKET) mime = mimetypes.guess_type(filename)[0] k = Key(b) k.key = 'recipe_id_' + str(recipe_id) + '_' + filename k.set_metadata("Content_Type", mime) content.seek(0) k.set_contents_from_file(content) k.set_acl("public-read") if not request.user.is_authenticated(): return HttpResponseRedirect('/') if request.method == 'POST': form = RecipeForm(request.POST, request.FILES) recipeName = request.POST['name'] if Recipe.objects.filter(name=recipeName).count() > 0: messages.add_message( request, messages.ERROR, "The recipe name " + recipeName + " has been taken. Please choose another name for your recipe.") return render(request, 'shakeapp/add.html') if form.is_valid(): newRecipe = form.save(commit=False) pictureFile = form.cleaned_data['picture'] newRecipe.picture.save(pictureFile.name, pictureFile) filename = pictureFile.name storeInS3(newRecipe.id, filename, pictureFile.file) newRecipe.url = settings.S3URL + 'recipe_id_' + str( newRecipe.id) + "_" + filename newRecipe.save() return HttpResponseRedirect("/shakeapp/") else: print print form.errors messages.add_message( request, messages.ERROR, "There has been an error in the form. Please make sure your inputs are correct." ) return render(request, 'shakeapp/add.html') return render_to_response('shakeapp/add.html', context_instance=RequestContext(request))
def edit_recipe(request, id): recipe = get_object_or_404(Recipe, id=id) tag_prepop = Tag.objects.get_for_object(recipe) tool_prepop = recipe.tools.all() if recipe.user != request.user and request.user.is_superuser == False: return render_to_response('recipes/forbidden.html', context_instance=RequestContext(request)) if request.method == 'POST': form = RecipeForm(request.POST, request.FILES, instance=recipe) formset = RecipeIngredientsFormset(request.POST, request.FILES, instance=recipe) if form.is_valid(): recipe = form.save(commit=False) if formset.is_valid(): formset.save() recipe.save() return render_to_response('recipes/view_recipe.html', {'recipe': recipe,}, context_instance=RequestContext(request)) else: form = RecipeForm(instance=recipe) formset = RecipeIngredientsFormset(instance=recipe) return render_to_response('recipes/edit_recipe.html', {'recipe': recipe, 'form': form, 'formset': formset, 'tag_prepop': tag_prepop, 'tool_prepop': tool_prepop}, context_instance=RequestContext(request))
def add_recipe(request): if request.method == 'POST': form = RecipeForm(request.POST, request.FILES) if form.is_valid(): recipe = form.save(commit=False) recipe.user = request.user recipe.save() formset = RecipeIngredientsFormset(request.POST, request.FILES, instance=recipe) if formset.is_valid(): formset.save() recipe.save() return render_to_response('recipes/view_recipe.html', {'recipe': recipe,}, context_instance=RequestContext(request)) else: recipe.delete() else: formset = RecipeIngredientsFormset(request.POST, request.FILES) else: form = RecipeForm() formset = RecipeIngredientsFormset() return render_to_response('recipes/add_recipe.html', {'form': form, 'formset': formset}, context_instance=RequestContext(request))
def recipe_edit(request, recipe_slug): if request.method == 'POST': if recipe_slug: recipe = Recipe.objects.get(slug=recipe_slug) if not request.user.can_modify(recipe): raise Exception(u'User %s cannot modify recipe %s' % \ (request.user, recipe)) form = RecipeForm(request.POST, instance=recipe) else: form = RecipeForm( request.POST) # todo load instance, add to the form if form.is_valid(): #save the user if he's logged in and the recipe is new if request.user.is_authenticated() and not form.instance.id: logging.debug('saving new recipe: %s', form.cleaned_data['name']) form.instance.inserted_by = request.user form.save() return HttpResponseRedirect(reverse('recipe_detail', \ args=[form.instance.slug])) else: pass #TODO handle validation ??? elif recipe_slug: recipe = Recipe.objects.get(slug=recipe_slug) if not request.user.can_modify(recipe): raise Exception(u'User %s cannot modify recipe %s' % \ (request.user, recipe)) form = RecipeForm(instance=recipe) else: form = RecipeForm() #TODO if there's GET parameter tag, check that tag in 'category selection' if 'tag' in request.GET: #http://www.mail-archive.com/[email protected]/msg67842.html try: tag = Tag.objects.get(slug=request.GET['tag']) if tag: form.fields['tags'].initial = [tag.id] except Tag.DoesNotExist, e: logging.warn('Error loading tag [%s]: %s', request.GET['tag'], e)
def correct_recipe(request): if request.method == 'POST': form = RecipeForm(request.POST, request.FILES) if form.is_valid(): recipe = form.save(commit=False) recipe.user = request.user recipe.save() junk_id = request.POST['junkid'] junk = JunkRecipe.objects.get(id=junk_id) formset = RecipeIngredientsFormset(request.POST, request.FILES, instance=recipe) if formset.is_valid(): formset.save() recipe.save() junk.is_added = True junk.derived_recipe = recipe junk.save() return render_to_response( 'recipes/view_recipe.html', { 'recipe': recipe, }, context_instance=RequestContext(request)) else: recipe.delete() else: junk_id = request.POST['junkid'] junk = JunkRecipe.objects.get(id=junk_id) formset = RecipeIngredientsFormset(request.POST, request.FILES) else: junk = random.choice(JunkRecipe.objects.filter(is_added=False)) form = RecipeForm() formset = RecipeIngredientsFormset() return render_to_response('recipes/correct_recipe.html', { 'form': form, 'formset': formset, 'junk': junk }, context_instance=RequestContext(request))
def add(request): def storeInS3(recipe_id, filename, content): conn = S3Connection(settings.AWS_ACCESS_KEY_ID, settings.AWS_SECRET_ACCESS_KEY) b = conn.create_bucket(settings.S3BUCKET) mime = mimetypes.guess_type(filename)[0] k = Key(b) k.key = 'recipe_id_'+str(recipe_id) +'_'+filename k.set_metadata("Content_Type", mime) content.seek(0) k.set_contents_from_file(content) k.set_acl("public-read") if not request.user.is_authenticated(): return HttpResponseRedirect('/') if request.method == 'POST': form = RecipeForm(request.POST, request.FILES ) recipeName = request.POST['name'] if Recipe.objects.filter(name=recipeName).count() > 0: messages.add_message(request, messages.ERROR,"The recipe name "+recipeName+" has been taken. Please choose another name for your recipe.") return render(request, 'shakeapp/add.html') if form.is_valid(): newRecipe = form.save(commit=False) pictureFile = form.cleaned_data['picture'] newRecipe.picture.save(pictureFile.name, pictureFile) filename = pictureFile.name storeInS3(newRecipe.id, filename, pictureFile.file) newRecipe.url = settings.S3URL+'recipe_id_'+str(newRecipe.id)+"_"+filename newRecipe.save() return HttpResponseRedirect("/shakeapp/") else: print print form.errors messages.add_message(request, messages.ERROR,"There has been an error in the form. Please make sure your inputs are correct.") return render(request, 'shakeapp/add.html') return render_to_response('shakeapp/add.html',context_instance = RequestContext(request) )