3
votes

django redirige l'utilisateur vers le message après l'avoir créé

je veux rediriger l'utilisateur vers le message après l'avoir créé avec les formulaires django

dans models.py

from django.urls import path
from . import views

urlpatterns = [

    path('', views.home, name='home'),
    path('text/<str:pk>', views.text, name="text"),
    path('signin/', views.signin, name="signin"),
    path('signup/', views.signup, name="signup"),
    path('logout/', views.logout, name="logout"),
]
 

dans ma vue.py

class TextForm(ModelForm):
    class Meta:
        model = Text
        fields = ['title','document','requirements','deadline']
        widgets = {
            'title' : forms.TextInput(attrs={'placeholder':'Title','class':'form-control m-2 mb-4 pb-2'}),
            'deadline' : forms.DateInput(attrs={'placeholder':'Deadline','type':'date','class':'form-control m-2 pt-2',
            'id':'opendate'}),
            'requirements' : forms.Textarea(attrs={'placeholder':ps_note,'class':'form-control col m-2','rows':'3'}),
            'document' : forms.Textarea(attrs={'placeholder':ps_text,'class':'form-control'}),

        }

dans mes forms.py

    if request.method == "POST":   
        form = TextForm(request.POST)
        if form.is_valid() and request.user.is_authenticated:
            user = request.user
            text = form.save(commit=False)
            author = User.objects.filter(email=user.email).first()
            text.author = author
            form.save()
            form = TextForm()

    context = {'form': form, 'text': text}

    return render(request, 'main/text.html', context)

dans mes urls.py

class Text(models.Model):

    title = models.CharField(max_length=200, null=True)
    document = models.TextField(max_length=None, null=True)
    requirements = models.TextField(max_length=200, null=True)
    date_created = models.DateField(auto_now_add=True, null=True)
    deadline = models.DateField(null=True)

    author = models.ForeignKey(User, on_delete=models.CASCADE, null=True)

    def __str__(self):
        return self.title

J'ai dû ajouter cela, donc stackoverflow accepte ma question car il dit que c'est principalement du code même après avoir dit tous les détails que je pense


3 commentaires

Pouvez-vous ajouter les urls.py?


@ArakkalAbu je l'ai ajouté


IMHO, mieux vaut diviser la vue de liste et la vue détaillée.


4 Réponses :


-1
votes

Ne devriez-vous pas changer "nom" en "pk" dans votre urls.py?


1 commentaires

je ne pense pas, cela fonctionne bien lorsque j'essaie de saisir chaque message, mon problème est avec la redirection vers le message qui a été créé



0
votes

je pense que vous devez utiliser "commit"

form.save(commit=True)

vérifier cette réponse

entrez la description du lien ici


1 commentaires

J'ai essayé de lire le code mais je n'ai pas pu l'appliquer moi-même, pouvez-vous me montrer exactement ce qu'il faut ajouter ou ici pour ajouter (commit = True)



0
votes
def text(request, pk):

    form = TextForm()
    
    if request.method == "POST":
        form = TextForm(request.POST)
        if form.is_valid():
            text = form.save(commit=False)
            text = Text.objects.get(id=pk)
            text.save()
            return redirect('text')
    else:
        text = Text.objects.get(id=pk)

    context = {'form': form, 'text': text}

    return render(request, 'main/text.html', context)


0 commentaires

0
votes

si quelqu'un cherche quelque chose de similaire,
après quelques jours, j'ai pu le résoudre moi-même voici ce que j'ai fait:

if request.method == "POST":   
    text_form = TextForm(request.POST)
    if text_form.is_valid() and request.user.is_authenticated:
        user = request.user
        text = text_form.save(commit=False)
        author = User.objects.filter(email=user.email).first()
        text.author = author
        text_form.save()
        text_form = TextForm()
          # this to select the id of the model object
        pk = text.id
        return redirect("text",pk)


0 commentaires