如何使用外键主题更新 django 中的页面



我是 django 的新手,我正在尝试将带有外键的页面更新为主题。这是我的代码

models.py

class Subject(models.Model):
title = models.CharField(max_length = 200)
slug = models.SlugField(blank = False)
visible = models.BooleanField(default = True)
position = models.IntegerField()
date_published = models.DateTimeField(auto_now_add = True)
date_updated = models.DateTimeField(auto_now_add=False)
def __str__(self):
return self.title

class Page(models.Model):
subject = models.ForeignKey(Subject, on_delete= models.CASCADE)
title = models.CharField(max_length = 200)
slug = models.SlugField(blank = False)
description = models.TextField()
thumbs = models.ImageField(blank = True)
visible = models.BooleanField(default = True)
position = models.IntegerField()
date_published = models.DateTimeField(auto_now_add = True, auto_now=False)
date_updated = models.DateTimeField(auto_now_add=False, auto_now=True)
def __str__(self):
return self.title

urls.py

urlpatterns = [
path('dashboard/', views.dashboard, name='dashboard'),
re_path(r'^dashboard/edit/(?P<subject_slug>[w-]+)/(?P<slug>[w-]+)', views.edit_article, name='edit_page'),
]

views.py

def edit_article(request, subject_slug, slug):
subject = Subject.objects.get(slug = subject_slug)
article = subject.page_set.get(slug = slug)
form = ArticleForm(request.POST or None, instance = article)
if request == request.POST:
form = ArticleForm(request.POST, instance = article)
if form.is_valid():
c = form.save( commit = False)
c = subject
c.save()
return HttpResponseRedirect('/dashboard/')
context = {
'title' : article.title,
'article' : article,
'form':form
}
return render(request, 'dashboard/editarticle.html', context)

forms.py

from django import forms
from .models import Subject, Page, NewsFeed
class ArticleForm(forms.ModelForm):
class Meta:
model = Page
fields = ['title','slug','description','thumbs', 'visible','position']

文章.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Edit article</title>
<link rel="stylesheet" href="">
</head>
<body>
<h1>{{ title }}</h1>
<form  method="POST" accept-charset="utf-8">{% csrf_token %}
{{ form.as_p }} 
<input type ='submit' value='submit'/>
</form>
</body>
</html>

当我尝试保存表单时,视图不会重定向并且页面不会更新,你们能否启发我如何完成更新页面的任务。

提前致谢

你试过吗

def my_view(request):
...
return redirect('/some/url/')

参考 https://docs.djangoproject.com/en/2.1/topics/http/shortcuts/

尝试打印您从 slug 获得的文章,如果它正在获取文章,则只需分配

form = ArticleForm(instance = article)

现在,您将拥有一个具有先前值的初始化表单。

还有一个建议,尝试使用 django 类基础视图。仍然有任何疑问评论它。

最新更新