- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
提前感谢您阅读这个问题,希望有人能够帮助我。几周前我刚刚开始使用 Django,现在我已经被一个问题困扰了一段时间。该应用程序的目的是提供一个页面,人们可以在其中发布有关某个对象(在本例中为教授)的评论。因此,当我提交表单时,我需要存储教授的 ID 和用户 ID,然后在各自的页面上显示评论。现在我可以存储用户 ID,但无法获取教授 ID。在查看了多个问题后,我一直无法找到解决方案,所以我希望有人有类似问题的经验。
我已经包含了错误,但如果需要整个日志,我很乐意提供。我只是不想将这篇文章扩展得更多。我正在使用 Django 2.2 和 MySQL,这是我到目前为止的代码。
forms.py
from django import forms
from .models import ProfessorRating
class CommentForm(forms.ModelForm):
class Meta:
model = ProfessorRating
fields = ('body', )
views.py
from .models import Professor
from .forms import CommentForm
from django.views.generic.edit import FormMixin
from django.urls import reverse
from django.views.generic import (
DetailView,
ListView,
)
# Create your views here.
class ProfessorListView(ListView):
model = Professor
paginate_by = 9
template_name = 'professors/professor_list.html'
class ProfessorDetailView(FormMixin, DetailView):
model = Professor
template_name = 'professors/professor_detail.html'
slug_url_kwarg = 'slug'
slug_field = 'slug'
paginate_by = 10
form_class = CommentForm
def get_success_url(self):
return reverse('professors:professor_detail', kwargs={'slug': self.object.slug})
def get_context_data(self, **kwargs):
context = super(ProfessorDetailView, self).get_context_data(**kwargs)
context['form'] = CommentForm(initial={'professor': self.object})
return context
def post(self, request, *args, **kwargs):
self.object = self.get_object()
form = self.get_form()
if form.is_valid():
obj = form.save(commit=False)
obj.user = request.user
p = Professor.objects.get(id='prof_id')
form.instance.Professor = p
obj.save()
return super(ProfessorDetailView, self).form_valid(form)
else:
return self.form_invalid(form)
models.py
from __future__ import unicode_literals
from django.db.models.signals import pre_save
from django.db import models
from django.contrib.auth.models import User
from django.utils.text import slugify
from courses.models import Course
class Professor(models.Model):
prof_id = models.AutoField(db_column='prof_ID', primary_key=True) # Field name made lowercase.
first_name = models.CharField(max_length=25)
last_name = models.CharField(max_length=25)
title = models.CharField(max_length=30)
email = models.CharField(max_length=50)
phone_number = models.CharField(max_length=15)
office = models.CharField(max_length=100)
slug = models.SlugField(unique=True)
picture = models.CharField(max_length=400)
courses = models.CharField(max_length=400)
def __str__(self):
return self.last_name
class Meta:
managed = True
ordering = ['last_name']
db_table = 'professor'
# THIS IS THE MODEL FOR THE COMMENTS/RATING
class ProfessorRating(models.Model):
rating_id = models.AutoField(db_column='rating_ID', primary_key=True) # Field name made lowercase.
user = models.ForeignKey(User, on_delete=models.CASCADE, db_column='username')
prof = models.ForeignKey(Professor, db_column='prof_ID', on_delete=models.CASCADE, related_name='comments') # Field name made lowercase.
body = models.TextField()
created = models.DateTimeField(auto_now_add=True)
approved = models.BooleanField(default=False)
def approved(self):
self.approved = True
self.save()
def __str__(self):
return self.body
class Meta:
managed = True
ordering = ['-rating_id']
db_table = 'prof_rating'
def create_slug(instance, new_slug=None):
slug = slugify(instance.first_name)
if new_slug is not None:
slug = new_slug
qs = Professor.objects.filter(slug=slug).order_by('last_name')
exists = qs.exists()
if exists:
new_slug = "%s-%s" % (slug, qs.first().prof_id)
return create_slug(instance, new_slug=new_slug)
return slug
def pre_save_course_receiver(sender, instance, *args, **kwargs):
if not instance.slug:
instance.slug = create_slug(instance)
pre_save.connect(pre_save_course_receiver, sender=Course)
错误
Internal Server Error: /professors/Christopher-Antoun/
Traceback (most recent call last):
File "D:\School\Projects\iTerps\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "D:\School\Projects\iTerps\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "D:\School\Projects\iTerps\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "D:\School\Projects\iTerps\lib\site-packages\django\views\generic\base.py", line 71, in view
return self.dispatch(request, *args, **kwargs)
File "D:\School\Projects\iTerps\lib\site-packages\django\views\generic\base.py", line 97, in dispatch
return handler(request, *args, **kwargs)
File "D:\School\UMD\INST377\iTerps\professors\views.py", line 40, in post
p = Professor.objects.get(id='prof_id')
File "D:\School\Projects\iTerps\lib\site-packages\django\db\models\manager.py", line 82, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "D:\School\Projects\iTerps\lib\site-packages\django\db\models\query.py", line 399, in get
clone = self.filter(*args, **kwargs)
File "D:\School\Projects\iTerps\lib\site-packages\django\db\models\query.py", line 892, in filter
return self._filter_or_exclude(False, *args, **kwargs)
File "D:\School\Projects\iTerps\lib\site-packages\django\db\models\query.py", line 910, in _filter_or_exclude
clone.query.add_q(Q(*args, **kwargs))
File "D:\School\Projects\iTerps\lib\site-packages\django\db\models\sql\query.py", line 1290, in add_q
clause, _ = self._add_q(q_object, self.used_aliases)
File "D:\School\Projects\iTerps\lib\site-packages\django\db\models\sql\query.py", line 1318, in _add_q
split_subq=split_subq, simple_col=simple_col,
File "D:\School\Projects\iTerps\lib\site-packages\django\db\models\sql\query.py", line 1190, in build_filter
lookups, parts, reffed_expression = self.solve_lookup_type(arg)
File "D:\School\Projects\iTerps\lib\site-packages\django\db\models\sql\query.py", line 1049, in solve_lookup_type
_, field, _, lookup_parts = self.names_to_path(lookup_splitted, self.get_meta())
File "D:\School\Projects\iTerps\lib\site-packages\django\db\models\sql\query.py", line 1420, in names_to_path
"Choices are: %s" % (name, ", ".join(available)))
django.core.exceptions.FieldError: Cannot resolve keyword 'id' into field. Choices are: comments, courseprof, courses, email, first_name, last_name, office, phone_number, picture, prof_id, slug, title
最佳答案
回溯清楚地显示了有问题的行:
p = Professor.objects.get(id='prof_id')
该行有两个问题。首先,你的 Professor 类没有 id 字段;它有一个 prof_id
。其次,'prof_id'
是一个字符串;你需要一个实际值,即你想要获取的教授的 ID。
然而这整件事毫无意义。您已经拥有教授对象;它是self.object
。您应该删除此查询并仅使用它。
if form.is_valid():
obj = form.save(commit=False)
obj.user = request.user
obj.prof = self.object
obj.save()
另请注意,您需要使用正确的字段名称;您的 ProfessorRating 对象有一个名为 prof
,而不是 Professor
。
关于python - Django:我需要将两个外键值传递到我的数据库以跟踪评论和用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56035826/
我正在处理一组标记为 160 个组的 173k 点。我想通过合并最接近的(到 9 或 10 个组)来减少组/集群的数量。我搜索过 sklearn 或类似的库,但没有成功。 我猜它只是通过 knn 聚类
我有一个扁平数字列表,这些数字逻辑上以 3 为一组,其中每个三元组是 (number, __ignored, flag[0 or 1]),例如: [7,56,1, 8,0,0, 2,0,0, 6,1,
我正在使用 pipenv 来管理我的包。我想编写一个 python 脚本来调用另一个使用不同虚拟环境(VE)的 python 脚本。 如何运行使用 VE1 的 python 脚本 1 并调用另一个 p
假设我有一个文件 script.py 位于 path = "foo/bar/script.py"。我正在寻找一种在 Python 中通过函数 execute_script() 从我的主要 Python
这听起来像是谜语或笑话,但实际上我还没有找到这个问题的答案。 问题到底是什么? 我想运行 2 个脚本。在第一个脚本中,我调用另一个脚本,但我希望它们继续并行,而不是在两个单独的线程中。主要是我不希望第
我有一个带有 python 2.5.5 的软件。我想发送一个命令,该命令将在 python 2.7.5 中启动一个脚本,然后继续执行该脚本。 我试过用 #!python2.7.5 和http://re
我在 python 命令行(使用 python 2.7)中,并尝试运行 Python 脚本。我的操作系统是 Windows 7。我已将我的目录设置为包含我所有脚本的文件夹,使用: os.chdir("
剧透:部分解决(见最后)。 以下是使用 Python 嵌入的代码示例: #include int main(int argc, char** argv) { Py_SetPythonHome
假设我有以下列表,对应于及时的股票价格: prices = [1, 3, 7, 10, 9, 8, 5, 3, 6, 8, 12, 9, 6, 10, 13, 8, 4, 11] 我想确定以下总体上最
所以我试图在选择某个单选按钮时更改此框架的背景。 我的框架位于一个类中,并且单选按钮的功能位于该类之外。 (这样我就可以在所有其他框架上调用它们。) 问题是每当我选择单选按钮时都会出现以下错误: co
我正在尝试将字符串与 python 中的正则表达式进行比较,如下所示, #!/usr/bin/env python3 import re str1 = "Expecting property name
考虑以下原型(prototype) Boost.Python 模块,该模块从单独的 C++ 头文件中引入类“D”。 /* file: a/b.cpp */ BOOST_PYTHON_MODULE(c)
如何编写一个程序来“识别函数调用的行号?” python 检查模块提供了定位行号的选项,但是, def di(): return inspect.currentframe().f_back.f_l
我已经使用 macports 安装了 Python 2.7,并且由于我的 $PATH 变量,这就是我输入 $ python 时得到的变量。然而,virtualenv 默认使用 Python 2.6,除
我只想问如何加快 python 上的 re.search 速度。 我有一个很长的字符串行,长度为 176861(即带有一些符号的字母数字字符),我使用此函数测试了该行以进行研究: def getExe
list1= [u'%app%%General%%Council%', u'%people%', u'%people%%Regional%%Council%%Mandate%', u'%ppp%%Ge
这个问题在这里已经有了答案: Is it Pythonic to use list comprehensions for just side effects? (7 个答案) 关闭 4 个月前。 告
我想用 Python 将两个列表组合成一个列表,方法如下: a = [1,1,1,2,2,2,3,3,3,3] b= ["Sun", "is", "bright", "June","and" ,"Ju
我正在运行带有最新 Boost 发行版 (1.55.0) 的 Mac OS X 10.8.4 (Darwin 12.4.0)。我正在按照说明 here构建包含在我的发行版中的教程 Boost-Pyth
学习 Python,我正在尝试制作一个没有任何第 3 方库的网络抓取工具,这样过程对我来说并没有简化,而且我知道我在做什么。我浏览了一些在线资源,但所有这些都让我对某些事情感到困惑。 html 看起来
我是一名优秀的程序员,十分优秀!