我用改topic的方法改了new_entry,也没有行通。
views.py
from django.shortcuts import render
from django.http import HttpResponseRedirect
from django.urls import reverse
from .models import Topic,Entry
from .forms import TopicForm,EntryForm
from django.contrib.auth.decorators import login_required
def index(request):
#学习笔记的主页
return render(request,'learning_logs/index.html')
@login_required
def topics(request):
#显示所有的主题
topics = Topic.objects.filter(owner=request.user).order_by('date_added')
context = {'topics':topics}
return render(request,'learning_logs/topics.html',context)
@login_required
def topic(request,topic_id):
#显示单个主题及其所有的项目
topic = Topic.objects.filter(owner=request.user).get(id = topic_id)
#确认请求的主题属于当前用户
if topic.owner != request.user:
raise Http404
entries = topic.entry_set.order_by('-date_added')
context = {'topic':topic,'entries':entries}
return render(request,'learning_logs/topic.html',context)
@login_required
def new_topic(request):
'''添加新主题'''
if request.method != 'POST':
#未提交数据 创建一个新表单
form = TopicForm()
else:
#POST提交的数据 对数据进行处理
form = TopicForm(request.POST)
if form.is_valid():
new_topic = form.save(commit=False)
new_topic.owner = request.user
new_topic.save()
return HttpResponseRedirect(reverse('learning_logs:topics'))
context = {'form':form}
return render(request, 'learning_logs/new_topic.html',context)
@login_required
def new_entry(request,topic_id):
topic = Topic.objects.get(id=topic_id)
if request.method != 'POST':
form = EntryForm()
else:
form = EntryForm(data=request.POST)
if form.is_valid():
return HttpResponseRedirect(reverse('learning_logs:topic',args=[topic_id]))
context = {'topic':topic,'form':form}
return render(request, 'learning_logs/new_entry.html',context)
@login_required
def edit_entry(request,entry_id):
'''编辑现有的条目'''
entry = Entry.objects.get(id=entry_id)
topic = entry.topic
if topic.owner != request.user:
raise Http404
if request.method != 'POST':
form = EntryForm(instance=entry)
else:
#POST提交的数据,对数据进行处理
form = EntryForm(instance=entry,data=request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse('learning_logs:topic',args=[topic.id]))
context = {'entry':entry,
'topic':topic,
'form':form
}
return render(requ
models.py
from django.db import models
from django.contrib.auth.models import User
class Topic(models.Model):
#用户学习主题
text = models.CharField(max_length= 200)
date_added = models.DateTimeField(auto_now_add=True)
owner = models.ForeignKey(User,on_delete=models.CASCADE)
def __str__(self):
#返回模型的字符串表示
return self.text
class Entry(models.Model):
#学到的有关某个主题的具体知识
topic = models.ForeignKey(Topic,on_delete=models.CASCADE)
text = models.TextField()
date_added = models.DateTimeField(auto_now_add= True)
owner = models.ForeignKey(User, on_delete=models.CASCADE)
class meta:
verbose_name_plural ='entries'
def __str__(self):
#返回模型的字符串表示
if len(self.text) >= 50:
return self.text[:50] + '...'
else:
return self.text[:]