/create Listing() 处的 TypeError 获得意外的关键字参数:“description”

问题描述 投票:0回答:1

我正在尝试创建一个电子商务网站,但它不允许我创建列表并发布它 继承人的观点.py

from django.contrib.auth import authenticate, login, logout
from django.db import IntegrityError
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render
from django.urls import reverse

from .models import User, Category, Listing

def index(request):
    activeListings = Listing.objects.filter(isActive=True)
    allCategories = Category.objects.all()
    return render(request, "auctions/index.html",{
        "listings": activeListings,
        "categories": allCategories
    })

def displayCategory(request):
    if request.method == "POST":
        categoryFromForm = request.POST['category']
        category = category.objects.get(categoryName=categoryFromForm)
        activeListings = Listing.objects.filter(isActive=True, category=category)
        allCategories = Category.objects.all()
        return render(request, "auctions/index.html",{
            "listings": activeListings,
            "categories": allCategories
        })


def createListing(request):
    if request.method=="GET":
        allCategories = Category.objects.all()
        return render(request, "auctions/create.html", {
            "categories": allCategories
        })
    else:
        title = request.POST.get("title")
        description = request.POST.get("description")
        imageurl = request.POST.get("imageurl")
        price = request.POST.get("price")
        category = request.POST.get("category")
        currentUser = request.user
        categoryData=Category.objects.get(categoryName=category)
        newListing = Listing(
            title = title,
            description = description,
            imageUrl = imageurl,
            price = str(price),
            category = categoryData,
            owner = currentUser
        )
        newListing.save()
        return HttpResponseRedirect(index)

def login_view(request):
    if request.method == "POST":

        # Attempt to sign user in
        username = request.POST["username"]
        password = request.POST["password"]
        user = authenticate(request, username=username, password=password)

        # Check if authentication successful
        if user is not None:
            login(request, user)
            return HttpResponseRedirect(reverse("index"))
        else:
            return render(request, "auctions/login.html", {
                "message": "Invalid username and/or password."
            })
    else:
        return render(request, "auctions/login.html")


def logout_view(request):
    logout(request)
    return HttpResponseRedirect(reverse("index"))


def register(request):
    if request.method == "POST":
        username = request.POST["username"]
        email = request.POST["email"]

        # Ensure password matches confirmation
        password = request.POST["password"]
        confirmation = request.POST["confirmation"]
        if password != confirmation:
            return render(request, "auctions/register.html", {
                "message": "Passwords must match."
            })

        # Attempt to create new user
        try:
            user = User.objects.create_user(username, email, password)
            user.save()
        except IntegrityError:
            return render(request, "auctions/register.html", {
                "message": "Username already taken."
            })
        login(request, user)
        return HttpResponseRedirect(reverse("index"))
    else:
        return render(request, "auctions/register.html")

这里是models.py

from django.db import models


class User(AbstractUser):
    pass

class Category(models.Model):
    categoryName = models.CharField(max_length=50)

    def __str__(self):
        return self.categoryName

class Listing(models.Model):
    title = models.CharField(max_length=30)
    imageUrl = models.CharField(max_length=300)
    price = models.FloatField(max_length=1000)
    isActive = models.BooleanField(default=True)
    owner = models.ForeignKey(User, on_delete=models.CASCADE, blank=True, null=True, related_name="user")
    category = models.ForeignKey(Category, on_delete=models.CASCADE, blank=True, null=True, related_name="category")

def __str__(self):
    return self.title

这里是index.html

{% extends "auctions/layout.html" %}

{% block body %}
    <h2>Active Listings</h2>
    <form action="{% url 'displayCategory' %}" method="POST">
        {% csrf_token %}
        <label for="category">Choose a category:</label>
        <select name="category" id="category">
            {% for cat in categories %}
                <option value="{{ cat }}">{{ cat }}</option>
            {% endfor %}
        </select>
        <button type="submit" class="btn btn-success">Select</button>
    </form>

    <div class="row mx-3">
        {% for listing in listings %}
                <div class="card" style="width: 18rem;">
                    <img class="card-img-top" src="{{ listing.imageUrl }}" alt="{{ listing.title }}">
                    <div class="card-body">
                        <h5 class="card-title">{{ listing.title }}</h5>
                        <p class="card-text">{{ listing.description }}</p>
                        <a href="" class="btn btn-primary"></a>
                    </div>
                </div>
        {% endfor %}
    </div>
{% endblock %}

这里是create.html

{% extends "auctions/layout.html" %}

{% block body %}
    <h2>Create Listing</h2>
    <form action="{% url 'create' %}" method="POST">
        {% csrf_token %}
        <div class="form-group">
            <label for="title">Title</label>
            <input type="text" class="form-control" id="title" placeholder="Enter Title:">
        </div>
        <div class="form-group">
            <label for="Description">Description</label>
            <input type="text" class="form-control" id="description" placeholder="Enter description:">
        </div>
        <div class="form-group">
            <label for="imageurl">Image</label>
            <input type="text" class="form-control" id="imageurl" placeholder="Enter image url:">
        </div>
        <div class="form-group">
            <label for="price">Price</label>
            <input type="text" class="form-control" id="price" placeholder="Enter Price">
        </div>
        <div class="form-group">
            <label for="category">Choose a category:</label>
            <select name="category" id="category">
                {% for cat in categories %}
                    <option value="{{ cat }}">{{ cat }}</option>
                {% endfor %}
            </select>
        </div>
        <button type="submit" class="btn btn-success">Add listing</button>
    </form>
{% endblock %}

我不知道该怎么办,但问题就在这里

title = request.POST.get("title")
        description = request.POST.get("description")
        imageurl = request.POST.get("imageurl")
        price = request.POST.get("price")
        category = request.POST.get("category")
        currentUser = request.user
        categoryData=Category.objects.get(categoryName=category)
        newListing = Listing(
                          …
            title = title,
            description = description,
            imageUrl = imageurl,
            price = str(price),
            category = categoryData,
            owner = currentUser

我不知道发生了什么,如果你们有人做过的话,请帮助一个名为 commerce 的 cs50W 项目。

python html django cs50
1个回答
1
投票

您的

Listing
模型没有
description
字段。如果您确实想创建带有描述的列表,请向您的
Listing
模型添加描述字段并迁移更改。

如果不需要描述,请将其从views.py

createListing
方法中删除。

© www.soinside.com 2019 - 2024. All rights reserved.