【问题标题】:Why one Django database query is working when similar one is not为什么一个 Django 数据库查询正在工作,而类似的查询却没有
【发布时间】:2019-06-30 12:17:09
【问题描述】:

我重复使用了两次类似的代码,但有一次它没有向数据库添加任何内容,谁能告诉我为什么?缺少表单验证是问题所在?

每次将表单发送到服务器时,我都会尝试将某些用户模型字段增加某个整数。其中一个工作,一个不工作。

下面的代码每次将 amount_cmets 加一:

def add_comment(request, pk):
    ticket = get_object_or_404(Ticket, pk=pk)
    if request.method == "POST":
        form = CommentForm(request.POST)
        if form.is_valid():
            comment = form.save(commit=False)
            comment.ticket = ticket
            comment.author = request.user
            comment.save()
            user = CustomUser.objects.get(username=request.user)
            user.amount_comments += 1
            user.save()
            messages.success(request, ('Comment added!'))
            return redirect('show_single', pk=pk)
    else:
        form = CommentForm()
    return render(request, 'add_comment.html', {'form': form})

...由于某种原因,这个并没有增加贡献:

def show(request, pk):
    if request.method == "POST":
        user = CustomUser.objects.get(username=request.user)
        user.contributions += 5
        user.save()
        return redirect('checkout', pk=pk)
    ticket = Ticket.objects.get(pk=pk)
    comment_list = Comment.objects.select_related().filter(
                   ticket_id=pk).order_by('-date')
    paginator = Paginator(comment_list, 4)
    page = request.GET.get('page')
    comments = paginator.get_page(page)
    key = settings.STRIPE_PUBLISHABLE_KEY
    return render(request, 'single_ticket.html', {'ticket': ticket, 'comments':
                  comments, 'key': key})

我在检查管理面板时没有收到任何错误,并且当 amount_cmets 每次上升时,用户的贡献字段不会更改 5。

CustomUser 扩展了 AbstractUser 并添加了两个字段:

from django.db import models
from django.contrib.auth.models import AbstractUser


class CustomUser(AbstractUser):
    contributions = models.IntegerField(default='0')
    amount_comments = models.IntegerField(default='0')

第二次 checkout.js 是用于表单的库:

<form action="{% url 'checkout' ticket.id %}" method="post">
    {% csrf_token %}
    <script src="https://checkout.stripe.com/checkout.js" 
    class="stripe-button"
    data-key={{ key }}
    data-description="Payment"
    data-amount="500"
    data-currency="gbp"
    data-locale="auto">
    </script>
</form>

urls.py:

from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
from . import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.home, name='home'),
    path('blog/', include('blog.urls')),
    path('ticket/', include('ticket.urls')),
    path('checkout/', include('checkout.urls')),
    path('login/', views.login_user, name='login'),
    path('sign_up', views.sign_up, name='sign_up'),
    path('logout/', views.logout_user, name='logout'),
    path('all_tickets/', views.all_tickets, name='all_tickets')
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

结帐应用 urls.py:

from django.urls import path
from . import views

urlpatterns = [
    path('<int:pk>', views.checkout, name='checkout'),
]

tickets app urls.py:

from django.urls import path
from . import views

urlpatterns = [
    path('delete/<ticket_id>', views.delete, name='delete'),
    path('show/<int:pk>', views.show, name='show_single'),
    path('show/<int:pk>/comment/', views.add_comment, name='add_comment'),
    path('add', views.add_ticket, name='add_ticket'),
]

【问题讨论】:

  • 如果没有看到 CustomUser 模型以及您如何调用视图,就无法回答这个问题。
  • 显示你的 urls.py
  • 我发现它在结帐views.py中添加了代码:codedef checkout(request, pk):ticket = Ticket.objects.get(pk=pk) user = CustomUser.objects .get(username=request.user) user.contributions += 5 return render(request, 'checkout.html', {'ticket': ticket})

标签: django database forms


【解决方案1】:

您正在发帖到{% url 'checkout' ticket.id %},此处将path('&lt;int:pk&gt;', views.checkout, name='checkout') 链接到views.checkout,而不是show。因此,此代码 (show) 从未针对给定形式执行。将此模板标记中的 URL 模式名称更改为正确的名称:

{% url 'show_single' ticket.id %}

【讨论】:

    猜你喜欢
    • 2018-04-30
    • 2013-12-30
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    • 2011-10-25
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多