簡體   English   中英

無法將數據發布到 Django 中的外鍵表

[英]Unable to post data to foreign key table in Django

我是Django的絕對初學者,我試圖通過將值填充到外鍵表來檢查POST方法。 我有兩張桌子。 請指導我哪里錯了。

  1. 包含 2 個條目的類別表,即 Coffee(PK = 1) 和 Desserts (PK = 2)
  2. 項目表

在此處輸入圖像描述

來自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(request): return render(request, "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>

我無法使用以下條目填充項目表: 在此處輸入圖像描述

我無法解決以下錯誤: 在此處輸入圖像描述

cId需要Category object,但您已將其指定為'1' _id , so in this case cId_id :如果要為名為fooForeignKey指定主鍵,請使用 _id ,因此在本例中cId_id

def send(request):
    if request.method == 'POST':
        a = request.POST.get('a');
        b = request.POST.get('b');
        obj = Item(itemName=a, cId_id=b)
        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類型的 object,因此您可以使用 Django 的get_object_or_404 function。 如果從cId發布的 cId 無效,則此 function 會自動引發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")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM