首页 > 解决方案 > 试图在我的 Django 应用程序上创建第二个 forms.py 以在同一页面上发布

问题描述

我设置了一个 forms.py 以成功发布到我的 Django 应用程序上。我想设置第二个 forms.py 发布到同一页面但我无法让它工作。表格出现了,但没有发布。

这是我的forms.py,第一个是成功的:

'''
from django import forms
from . import models

class CreatePost(forms.ModelForm):
    class Meta:
        model = models.Post
        fields = ['title', 'body','reverse_around_the_corner','speed_limit','watching_mirrors','centre_of_the_road','slug']

class CreateLearnerPost(forms.ModelForm):
    class Meta:
        model = models.LearnerPost
        fields = ['title', 'body', 'author', 'slug']
'''

这是我的观点 py,LearnerPost 视图是我要创建的视图:

'''
rom django.shortcuts import render, redirect
from .models import Post, LearnerPost
from django.contrib.auth.decorators import login_required
from . import forms

def PostList(request):
    posts = Post.objects.all().order_by('date')
    learner_posts = LearnerPost.objects.all().order_by('date')
    return render(request, 'logbook_index.html', {'posts':posts}, {'learner_posts':learner_posts})

def PostDetail(request, slug):
    post = Post.objects.get(slug=slug)
    return render(request, 'post_detail.html', {'post':post})

def LearnerPostDetail(request, slug):
    learner_post = LearnerPost.objects.get(slug=slug)
    return render(request, 'learner_post_detail.html', {'learner_post':learner_post})

def PostCreate(request):
    if request.method == 'POST':
        form = forms.CreatePost(request.POST, request.FILES)
        if form.is_valid():
            instance = form.save(commit=False)
            instance.author = request.user
            instance.save()
            return redirect('/logbook/')
    else:
        form = forms.CreatePost()
    return render(request, 'post_create.html', {'form':form})

def LearnerPostCreate(request):
    if request.method == 'POST':
        form = forms.CreateLearnerPost(request.POST, request.FILES)
        if form.is_valid():
            instance = form.save(commit=False)
            instance.author = request.user
            instance.save()
            return redirect('/logbook/')
    else:
        form = forms.CreateLearnerPost()
    return render(request, 'learner_post_create.html', {'form':form})
'''

这是我的网址,创建后是原始格式,而学习者帖子是新的:

'''
from django.conf.urls import url
from . import views

app_name = 'logbook'

urlpatterns = [
    url(r'^$', views.PostList, name='logbook_list'),
    url(r'^how-to/$', views.Howto, name='how-to'),
    url(r'^home/$', views.LogbookHome, name='logbook_home'),
    url(r'^create/$', views.PostCreate, name='create'),
    url(r'^learner/$', views.LearnerPostCreate, name='learner'),
    url(r'^list/(?P<slug>[-\w]+)/$', views.PostDetail, name='detail'),
    url(r'^list/(?P<slug>[-\w]+)/$', views.LearnerPostDetail, name='learner_detail'),
    ]
'''

最后是调用表单的地方:

'''{% extends 'base2.html' %}

{% block content %}
<div class="create-post">
  <h2>Create Post</h2>
  <div class="form-row">
  <form class="site-form" action="{% url 'logbook:learner' %}" method="learner_post">
    {% csrf_token %}
    {{ form }}
    <input type="submit" name="" value="Create">
  </form>
</div>
</div>
</div>
{% endblock %}

'''

这是表单在 index.html 中调用的地方:

'''<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8 mt-3">
            {% for learner_post in learner_posts %}
            <div class="card mb-4">
                <div class="card-body">
                  <h2 class="card-title"><a href="{% url "logbook:learner_detail" slug=post.slug %}"></a></h2>
                    <p class="card-text text-muted h6">{{ learner_post.date }}</p>
                    <p class="h4">Details: </p><p class="card-text">{{ learner_post.body }}</p>
                </div>
            </div>
            {% endfor %}
        </div>
    </div>
</div>
'''

标签: pythondjangoformsdjango-modelsdjango-views

解决方案


推荐阅读