我有个问题。我创建了名为"Flower“的模型,一切都很好,我可以创建新的”花“,可以从它们获得数据等等。问题是,当我想在SQL查询中使用列"owner_id”时,我发现了一个错误,尽管我可以使用它从对象获取数据(例如flower1.owner_id)。我删除了我的sqlite数据库几次,进行了新的迁移,并使用了迁移,但仍然不能工作,我也更改了专栏的名称并重新创建了它,但这仍然没有帮助。
我的models.py:
from django.db import models
from django.contrib.auth.models import User
class Flower(models.Model):
name = models.CharField(max_length=80)
water_time = models.IntegerField()
owner_id = models.ForeignKey(User, on_delete=models.CASCADE, default=1)
def __str__(self):
return self.name我的views.py (视图,我想使用它的地方):
class workspaceView(generic.DetailView):
template_name = 'floris/workspace.html'
def get_object(self):
with connection.cursor() as cursor:
cursor.execute(f'SELECT id,name FROM floris_Flower WHERE owner_id = {self.request.user.id}')
row = cursor.fetchall()
object = row
print(object)
if self.request.user.id == object.id:
return object
else:
print('Error')我的urls.py:
from django.urls import path
from . import views
urlpatterns = [
path('', views.index2, name='index2'),
path('login/', views.loginView, name='login'),
path('register/', views.register, name='register'),
path('addflower/', views.AddPlantView, name='addflower'),
path('index.html', views.logout_view, name='logout'),
path('workspace/', views.workspaceView.as_view(), name='workspace'),
path('profile/<str:username>/', views.ProfileView.as_view(), name='profile'),
]我的错误代码是:
OperationalError at /floris/workspace/
no such column: owner_id
Request Method: GET
Request URL: http://127.0.0.1:8000/floris/workspace/
Django Version: 3.2.4
Exception Type: OperationalError
Exception Value:
no such column: owner_id
Exception Location: /home/stazysta-kamil/.local/lib/python3.8/site-packages/django/db/backends/sqlite3/base.py, line 421, in execute
Python Executable: /usr/bin/python3
Python Version: 3.8.10
Python Path:
['/home/stazysta-kamil/Desktop/floris/mysite',
'/usr/lib/python38.zip',
'/usr/lib/python3.8',
'/usr/lib/python3.8/lib-dynload',
'/home/stazysta-kamil/.local/lib/python3.8/site-packages',
'/usr/local/lib/python3.8/dist-packages',
'/usr/lib/python3/dist-packages']
Server time: Tue, 06 Jul 2021 10:43:32 +0000发布于 2021-07-06 10:55:28
由于owner_id被声明为ForeignKey,它将在实际的owner_id_id数据库中可用。Django自动为该关系字段添加附加前缀_id。使用Django ORM时,您只需通过owner_id访问它,然后Django将在后台为您自动处理事务,但是如果您使用的是raw owner_id_id命令,则必须使用实际的表列名,即owner_id_id。如果您不想要这样的行为,请使用您想要的确切名称(例如,db_column )来设置模型字段的owner_id = models.ForeignKey(User, on_delete=models.CASCADE, default=1, db_column="owner_id")。
如Django文件所述:
在幕后的
中,Django将"_id“附加到字段名,以创建其数据库列名。在上面的示例中,Car模型的数据库表将有一个manufacturer_id列。
相关参考资料:
发布于 2021-07-06 11:29:37
该问题存在于花卉模型的"owner_id“领域。在模型中定义外键时,无需在末尾添加"_id“,因为Django会自动添加它
在这种情况下,应该足够替换
owner_id = models.ForeignKey(User, on_delete=models.CASCADE, default=1)使用
owner = models.ForeignKey(User, on_delete=models.CASCADE, default=1)https://stackoverflow.com/questions/68269165
复制相似问题