在 Django 中无法 post 数据到外键 table
Unable to post data to foreign key table in Django
我绝对是 Django 的初学者,我正在尝试通过将值填充到 POST 来检查方法外键 table。我有两个 table。请指导我哪里错了。
- Table for Category that has 2 entries, i.e., Coffee(PK = 1) and Desserts (PK = 2)
- Table for Items
来自models.py:
class Category(models.Model):
cId = models.AutoField(primary_key=True)
categoryName = models.CharField(max_length=20, unique=True)
def __str__(self):
return self.categoryName
# return[self.categoryName, self.cId]
# return self.cId
class Item(models.Model):
Id = models.AutoField(primary_key=True)
itemName = models.CharField(max_length=30,unique=True)
cId = models.ForeignKey(Category,on_delete=CASCADE)
来自 views.py:
def main(请求):
return 渲染(请求,“index.html”)
def send(request):
if request.method == "POST":
a = request.POST.get("a");
b = request.POST.get("b");
obj = Item(itemName = a, cId =b);
obj.save()
return HttpResponse("sent")
else:
return HttpResponse("form submission failed")
来自 urls.py(app):
urlpatterns = [
path('', views.main, name="main"),
path('send', views.send, name='send')
]
来自HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
{% load static %}
<link rel="stylesheet" href="{% static 'css.css' %}">
<title>CHECK-POST-METHOD</title>
</head>
<body>
<div class = "container">
<form method = "post" action = "send" class = "form">
{% csrf_token %}
<label for="a">Item Name</label>
<input type="text" name="a" id="a" maxlength="30">
<label for="b">PASS FOREIGN KEY--CATEGORY ID</label>
<input type="number" name="b" id="b" maxlength="5">
<button type="submit">SUBMIT</button>
</form>
</div>
<script src="{% static 'js.js' %}"></script>
</body>
</html>
我无法使用以下条目填充项目 table:
我无法解决以下错误:
cId
需要一个 Category
对象,但你给了它 '1'
。如果您想为名为 foo
的 ForeignKey
指定主键,您可以使用 <i>foo</i>_id
,所以在这种情况下 cId_id
:
def send(request):
if request.method == 'POST':
a = request.POST.get('a')
b = request.POST.get('b')
obj = Item(itemName=a, <strong>cId_id=b</strong>)
obj.save()
return HttpResponse("sent")
else:
return HttpResponse("form submission failed")
如错误中所示,Cid 必须是类别的实例
所以您的视图如下所示:
def send(request):
if request.method == "POST":
a = request.POST.get("a");
b = request.POST.get("b");
c_id = Category.objects.get(pk=b)
obj = Item(itemName=a, cId=b);
obj.save()
return HttpResponse("sent")
else:
return HttpResponse("form submission failed")
由于cId
需要是Category
类型的对象,可以使用Django的get_object_or_404
函数。如果 HTML 发布的 cId
无效,则此函数会自动引发 404
响应。
from django.shortcuts import get_object_or_404
def send(request):
if request.method == "POST":
a = request.POST.get("a");
b = request.POST.get("b");
b_obj = get_object_or_404(Category, b)
obj = Item(itemName = a, cId =b_obj)
obj.save()
return HttpResponse("sent")
else:
return HttpResponse("form submission failed")
我绝对是 Django 的初学者,我正在尝试通过将值填充到 POST 来检查方法外键 table。我有两个 table。请指导我哪里错了。
- Table for Category that has 2 entries, i.e., Coffee(PK = 1) and Desserts (PK = 2)
- Table for Items
来自models.py:
class Category(models.Model):
cId = models.AutoField(primary_key=True)
categoryName = models.CharField(max_length=20, unique=True)
def __str__(self):
return self.categoryName
# return[self.categoryName, self.cId]
# return self.cId
class Item(models.Model):
Id = models.AutoField(primary_key=True)
itemName = models.CharField(max_length=30,unique=True)
cId = models.ForeignKey(Category,on_delete=CASCADE)
来自 views.py: def main(请求): return 渲染(请求,“index.html”)
def send(request):
if request.method == "POST":
a = request.POST.get("a");
b = request.POST.get("b");
obj = Item(itemName = a, cId =b);
obj.save()
return HttpResponse("sent")
else:
return HttpResponse("form submission failed")
来自 urls.py(app):
urlpatterns = [
path('', views.main, name="main"),
path('send', views.send, name='send')
]
来自HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
{% load static %}
<link rel="stylesheet" href="{% static 'css.css' %}">
<title>CHECK-POST-METHOD</title>
</head>
<body>
<div class = "container">
<form method = "post" action = "send" class = "form">
{% csrf_token %}
<label for="a">Item Name</label>
<input type="text" name="a" id="a" maxlength="30">
<label for="b">PASS FOREIGN KEY--CATEGORY ID</label>
<input type="number" name="b" id="b" maxlength="5">
<button type="submit">SUBMIT</button>
</form>
</div>
<script src="{% static 'js.js' %}"></script>
</body>
</html>
我无法使用以下条目填充项目 table:
我无法解决以下错误:
cId
需要一个 Category
对象,但你给了它 '1'
。如果您想为名为 foo
的 ForeignKey
指定主键,您可以使用 <i>foo</i>_id
,所以在这种情况下 cId_id
:
def send(request):
if request.method == 'POST':
a = request.POST.get('a')
b = request.POST.get('b')
obj = Item(itemName=a, <strong>cId_id=b</strong>)
obj.save()
return HttpResponse("sent")
else:
return HttpResponse("form submission failed")
如错误中所示,Cid 必须是类别的实例 所以您的视图如下所示:
def send(request):
if request.method == "POST":
a = request.POST.get("a");
b = request.POST.get("b");
c_id = Category.objects.get(pk=b)
obj = Item(itemName=a, cId=b);
obj.save()
return HttpResponse("sent")
else:
return HttpResponse("form submission failed")
由于cId
需要是Category
类型的对象,可以使用Django的get_object_or_404
函数。如果 HTML 发布的 cId
无效,则此函数会自动引发 404
响应。
from django.shortcuts import get_object_or_404
def send(request):
if request.method == "POST":
a = request.POST.get("a");
b = request.POST.get("b");
b_obj = get_object_or_404(Category, b)
obj = Item(itemName = a, cId =b_obj)
obj.save()
return HttpResponse("sent")
else:
return HttpResponse("form submission failed")