python - Django 3.1.3 版表单未保存到模型
问题描述
我正在关注本教程
我已经回去编写了完全匹配的代码。我有另一种名为category_add的表单,它与此表单完全相同。但是对于我的生活,我无法弄清楚为什么bookmark_add不使用表单条目更新数据库。
模型.py
from django.db import models
from django.contrib.auth.models import User
class Category(models.Model):
title = models.CharField(max_length=255)
description = models.TextField(blank=True, null=True)
created_by = models.ForeignKey(User, related_name='categories', on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)
class Meta:
verbose_name_plural = 'Categories'
def __str__(self):
return self.title
class Bookmark(models.Model):
category = models.ForeignKey(Category, related_name='bookmarks', on_delete=models.CASCADE)
title = models.CharField(max_length=255)
description = models.TextField(blank=True, null=True)
url = models.CharField(max_length=255, blank=True)
created_by = models.ForeignKey(User, related_name='bookmarks', on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
视图.py
from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
from .forms import BookmarkForm
@login_required
def bookmark_add(request, category_id):
if request.method == 'POST':
form = BookmarkForm(request.POST)
if form.is_valid():
bookmark = form.save(commit=False)
bookmark.created_by = request.user
bookmark.category_id = category_id
bookmark.save()
return redirect('category', category_id=category_id)
else:
form = BookmarkForm()
context = {
'form': form
}
return render(request, 'bookmark/bookmark_add.html', context)
表格.py
from django.forms import ModelForm
from .models import Bookmark
class BookmarkForm(ModelForm):
class Meta:
model = Bookmark
fields = ['title', 'description', 'url']
网址.py
path('', dashboard, name='dashboard'),
path('categories/', categories, name='categories'),
path('categories/add/', category_add, name='category_add'),
path('categories/<int:category_id>/', category, name='category'),
path('categories/<int:category_id>/add_bookmark', bookmark_add, name='bookmark_add')
]
书签添加.html
{% extends 'core/base.html' %}
{% block content %}
<div class="container">
<h1 class="title">Add link</h1>
<form method="post" action=".">
{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="button is-primary">Submit</button>
</form>
</div>
{% endblock %}
解决方案
解决了这个!
这是一个愚蠢的问题,也是对我的疏忽。感谢 youtube 上的内容创建者。我只需要将“/”附加到 add_bookmark 的 url 路径。
问题:
path('categories/<int:category_id>/add_bookmark', bookmark_add, name='bookmark_add')
修复:
path('categories/<int:category_id>/add_bookmark/', bookmark_add, name='bookmark_add')
推荐阅读
- ruby-on-rails - 检查 ActiveRecord 数组中的单元格是否已更改
- google-cloud-platform - 为什么 Google Cloud Build 触发器找不到自定义命名的 .yaml 文件?
- python - 使用 Pandas 按列值过滤
- java - Java Android 从回调线程修改成员变量
- oracle - 有没有更简单的方法可以在同一张表上相互交换列名?
- angular - 角度 6= 错误:尝试区分“[object Object]”时出错。只允许使用数组和可迭代对象
- python - 在 Windows 上导入 libtiff 库时出现“找不到 TIFF 头文件”错误
- java - 适配器中的颜色
- django - 如何使用带有'docker:nginx + uwgsi + django + solr + db + ...'的LetsEncrypt将http更改为https?
- asp.net - 在 Telerik:RadGrid 中隐藏/显示“添加新记录”