django django-templates foreign-keys django-class-based-views

django - establecer el valor inicial en CreateView desde ForeignKey(non-self.request.user)



django-templates foreign-keys (1)

Necesitas crear una instancia de tu receta:

class IngredientAddView(CreateView): model=Ingredient def get_initial(self): recipe = get_object_or_404(Recipe, slug=self.kwargs.get(''slug'')) return { ''recipe'':recipe, }

Estoy intentando acceder a ForeignKeys en las vistas basadas en clase CreateView. Me gustaría poder establecer dinámicamente los valores iniciales en CBV desde ForeignKeys y también establecer dinámicamente enlaces de plantilla desde ForeignKeys.

Estas dos preguntas (1. valores iniciales, 2. enlaces de plantilla) pueden resolverse con métodos similares, o quizás con métodos diferentes ... Todavía estoy aprendiendo. Tal vez la primera pregunta se pueda resolver dentro de views.py y la segunda se pueda resolver con la sintaxis de la plantilla en ingredient_form.html ?

He visto preguntas sobre el establecimiento de valores iniciales de SO de los usuarios ( self.request.user ), pero no solo de una clave externa normal en models.py .

Estoy revisando django-by-errors e intentando agregar funciones adicionales para expandir mi conocimiento de django.

Mi pregunta se centra específicamente en views.py:IngredientAddView(CreateView) , en views.py:IngredientAddView(CreateView) , y en urls.py:''recipe-detail'' & ''ingredient-add ''.

Cuando veo un ''recipe-detail'' , puedo hacer clic en un enlace para ''ingredient-add'' . Me gustaría ''ingredient-add'' a "saber" en qué receta hizo clic y ser capaz de establecer esta receta como el valor inicial (mi intento en views.py:IngredientAddView:get_initials(self) no funciona), y también Podré enlazar de nuevo a esta receta (mi intento dentro de ingredient_form.html:{% comment %} no funciona).

Agradecería cualquier ayuda.

modelos.py

class Food(models.Model): name=models.CharField(max_length=20,unique=True) def __str__(self): return self.name def get_absolute_url(self): return reverse(''food-detail'',kwargs={''pk'':self.pk}) class Recipe(models.Model): title=models.CharField(max_length=80,unique=True) slug=models.SlugField(max_length=80,unique=True) description=models.TextField(blank=True) def __str__(self): return self.title def get_absolute_url(self): return reverse(''recipe-detail'',kwargs={''slug'':self.slug}) class Ingredient(models.Model): recipe=models.ForeignKey(Recipe) food=models.ForeignKey(Food) def __str__(self): return ''%s (%s)'' % (self.food, self.recipe)

vistas.py

class FoodListView(ListView): model=Food class FoodDetailView(DetailView): model=Food class FoodCreateView(CreateView): model=Food class RecipeListView(ListView): model=Recipe class RecipeDetailView(DetailView): model=Recipe class RecipeCreateView(CreateView): model=Recipe class RecipeUpdateView(UpdateView): model=Recipe class IngredientAddView(CreateView): model=Ingredient # def get_context_data(self,**kwargs): # context=super(IngredientAddView,self).get_context_data(**kwargs) # context[''foreign'']=self.request.session.get(''slug'') def get_initials(self): return { ''recipe'':self.request.session.get(''recipe'') }

urls.py

from .views import FoodListView, FoodDetailView, FoodCreateView, RecipeListView, RecipeDetailView, RecipeCreateView, RecipeUpdateView, IngredientAddView urlpatterns=patterns('''', url(r''^$'',RecipeListView.as_view(),name=''recipe-list''), url(r''^(?P<slug>[-/w]+)$'',RecipeDetailView.as_view(),name=''recipe-detail''), url(r''^(?P<slug>[-/w]+)/edit$'',RecipeUpdateView.as_view(),name=''recipe-edit''), url(r''^(?P<slug>[-/w]+)/add_ingredient/$'',IngredientAddView.as_view(),name=''ingredient-add''), url(r''^new/$'',RecipeCreateView.as_view(),name=''recipe-create''), url(r''^food/$'',FoodListView.as_view(),name=''food-list''), url(r''^food/(?P<pk>[/d]+)$'',FoodDetailView.as_view(),name=''food-detail''), url(r''^food/create/$'',FoodCreateView.as_view(),name=''food-create''), )

recipe_detail.html

{% extends "base_food.html" %} {% block title %}{{ recipe }} {% endblock %} {% block content %} <h1>{{ recipe }}</h1> <p>{{ recipe.id }}</p> <p>{{ recipe.title }}</p> <br> <h2>Description</h2> <p>{{ recipe.description|default:''No description'' }}</p> <h2>Ingredients</h2> <ul> {% for ingredient in recipe.ingredient_set.all %} <li>{{ ingredient }}</li> {% endfor %} </ul> <p><a href="{% url ''ingredient-add'' recipe.slug %}">Add ingredient</a></p> <p><a href="{% url ''recipe-edit'' recipe.slug %}">Edit recipe</a></p> <p><a href="{% url ''recipe-list'' %}">Back to recipe list</a></p> {% endblock %}

ingrediente_form.html

{% extends "base_food.html" %} {% block title %}Add Ingredient{% endblock %} {% block content %} <h1>Add Ingredient</h1> <form method="POST">{% csrf_token %} {{ form }} <button type="submit" class="btn btn-primary">Save</button> </form> {%comment%} <p><a href="{% url ''recipe-detail'' recipe.slug %}">Back to detail</a></p> {%endcomment%} <p><a href="{% url ''recipe-list'' %}">Back to recipe list</a></p> {% endblock %}