python - 主题 = Topic.objects.filter(owner=request.user).order_by('date_added') 不工作
问题描述
我是 Django 的初学者,我正在使用一本名为 Python Crash Course 的书来指导我。我目前正在做应用程序开发项目,但遇到了一些错误。显然,错误是由这一行引起的:topics = Topic.objects.filter(owner=request.user).order_by('date_added')
. 这是我的views.py的完整代码:
from django.shortcuts import render
from django.http import HttpResponseRedirect, Http404
from django.http import HttpResponseRedirect
from django.urls import reverse
from django.contrib.auth.decorators import login_required
from .models import Topic, Entry
from .forms import TopicForm, EntryForm
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.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:
form = TopicForm(data=request.POST)
if form.is_valid():
new_topic = form.save(commit=False)
new_topic.owner = request.user
new_topic.save()
form.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():
new_entry = form.save(commit=False)
new_entry.topic = topic
new_entry.save()
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:
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(request, 'learning_logs/edit_entry.html', context)
我多次检查了这个文件,我一直收到这个错误:Cannot resolve keyword 'owner' into field. Choices are: date_added, entry, id, text
. 我查看了许多具有解决方案的资源,但它们对我不起作用。有没有办法解决这个问题?
这是我的主题模型:
class Topic(models.Model):
text = models.CharField(max_length=200)
date_added = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.text
谢谢!
解决方案
您必须向模型添加owner
字段Topic
。
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
之后记得makemigrations
和migrate
他们:)
推荐阅读
- scipy - 无法导入 scipy
- javascript - 如果上传非图像文件,Multer-s3-transform 错误
- c# - 尝试从 Oracle 中的多个表中填充表中的数据
- ios - 为什么在应用安装后启动 Paper-Onboarding 时导航控制器会消失?
- python - 使用 python 列表推导修改列表本身,意外结果?
- angular - 我的函数返回未定义但在内部运行良好
- google-apps-script - 如何在 Google 表格上打开 Google 表单
- python - 如何在来自同一图像的并行容器中运行不同的 python 脚本
- mongodb - 如何通过 Kafka 连接器将数据从 Kafka 流式传输到 MongoDB
- amazon-web-services - aws 获取嵌入式仪表板网址