Quiero crear una nueva Falacia (ver models.py) a través del formulario al que accedo a la path('<slug:slug_tree>/new/', views.CreateFallacyView.as_view(), name='create_fallacy'), . Entonces, el usuario está en TreeDetailView (que corresponde a un árbol determinado), y puede agregar una nueva falacia a este árbol. El usuario debe ingresar el título y los detalles, pero el árbol (ForeignKey) debe asignarse en el código. Debe ser asignado al Árbol correspondiente desde el cual fue dirigido a CreateFallacyView. El slug del árbol está dentro de la URL, así que pensé que podría usar esa información de alguna manera, pero no tengo idea de cómo puedo proceder con esa información. ¡Cualquier ayuda es apreciada! ¿O probablemente hay otras soluciones más elegantes?
¡Muchas gracias!
modelos.py
class Tree(models.Model): title = models.CharField(max_length=50) detail = models.TextField() slug = models.SlugField(allow_unicode=True, unique=True, null=True, blank=True) class Fallacy(models.Model): title = models.CharField(max_length=50) detail = models.TextField() tree = models.ForeignKey(Tree, related_name='fallacy', on_delete=models.CASCADE)vistas.py
class CreateFallacyView(generic.CreateView): form_class = forms.FallacyFormformularios.py
class FallacyForm(forms.ModelForm): class Meta: model = models.Fallacy fields = ('title', 'detail')urls.py
app_name = 'argtree' urlpatterns = [ path('', views.TreeListView.as_view(), name='all'), path('<slug:slug_tree>/', views.TreeDetailView.as_view(), name='tree_detail'), path('<slug:slug_tree>/new/', views.CreateFallacyView.as_view(), name='create_fallacy'),En CreateFallacyView puede vincularlo al Tree dado en el .form_valid(…) [Django-doc] con:
from django.shortcuts import get_object_or_404 class CreateFallacyView(generic.CreateView): form_class = forms.FallacyForm def form_valid (self, form): tree = get_object_or_404(Tree, slug=self.kwargs['slug_tree']) form .instance.tree = tree return super().form_valid(form)