创建帖子并使用django提交其表单后,将作者重定向到他的帖子

时间:2020-09-07 22:27:47

标签: python python-3.x django django-forms django-views

我想在使用Django表单创建帖子后将用户重定向到该帖子

在models.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

在我看来。py

def text(request, pk):

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

    text = Text.objects.get(id=pk)

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

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

在我的表格中。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'}),

        }

在我的urls.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"),
]
 

我必须添加此内容,以便stackoverflow接受我的问题,因为即使说了所有详细信息,它仍说大部分是代码。

2 个答案:

答案 0 :(得分:0)

尝试一下:

ConstraintLayout

答案 1 :(得分:0)

有两种方法可以做到这一点。第一个涉及设置模型的get_absolute_url()函数。另一个答案中刚刚提到了另一个。 在您的models.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 get_absolute_url(self):
        return "/text/%i/" % self.id
    def __str__(self):
        return self.title

在您的views.py文件中:

def text(request, pk):

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

    text = Text.objects.get(id=pk)

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

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