【问题标题】:How to solve error message: no such column: auctions_auction.image_url如何解决错误消息:没有这样的列:auctions_auction.image_url
【发布时间】:2022-01-26 12:01:47
【问题描述】:

我正在创建一个拍卖网站,用户在创建新列表时将提交带有图片链接的表单。然后,此链接/网址将被转换并显示为网站上的图像。当我上传表单的详细信息(包括图片的链接)时,我不断收到此错误 -

""/create/ 处的操作错误

没有这样的列:auctions_auction.image_url。""

如何清除此错误?

VIEWS.PY

from django.shortcuts import render, redirect
from .forms import AuctionForm


def create_listing(request):
    form = AuctionForm()

    if request.method == 'POST':
        form = AuctionForm(request.POST, request.FILES)
        if form.is_valid:
            form.save()
            return redirect('index')
    else:
        form = AuctionForm()
    context = {'form': form}  
    return render(request, 'auctions/create-listing.html', context)

FORMS.PY

from .models import Auction
from django import forms
from django.forms import fields

class AuctionForm(forms.ModelForm):
    
    class Meta:
        model = Auction
        fields = ['title', 'description', 'current_bid', 'image_url']

模型.PY

from django.db import models
from django.core.files import File
from urllib.request import urlopen
from tempfile import NamedTemporaryFile


class Auction(models.Model):
    title = models.CharField(max_length=25)
    description = models.TextField()
    current_bid = models.IntegerField(null=False, blank=False)
    users_bid = models.IntegerField(null=False, blank=False)
    image_upload = models.ImageField(upload_to='images/')
    image_url = models.URLField(verbose_name="URL", max_length=255, unique=True)
    created_at = models.DateTimeField(auto_now_add=True)

    def save(self, *args, **kwargs):
        if self.image_url and not self.image_upload:
            img_temp = NamedTemporaryFile(delete=True)
            img_temp.write(urlopen(self.image_url).read())
            img_temp.flush()
            self.image_upload.save(f"image_{self.pk}", File(img_temp))
        super(self).save(*args, **kwargs)

    def __str__(self):
        return self.title

HTML

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

{% block body %}

    <form action="" method="post" enctype="multipart/form-data">
        {% csrf_token %}
        {{form.as_p}}
        <input type="submit" value="Submit">
    </form>

{% endblock %}

URLS.PY

urlpatterns = [
    path("create/", views.create_listing, name="create_listing")
]

if settings.DEBUG:
        urlpatterns += static(settings.MEDIA_URL,
                              document_root=settings.MEDIA_ROOT)

【问题讨论】:

    标签: django django-models django-views django-forms


    【解决方案1】:

    您必须将模型更改迁移到数据库中。这可能有效:

    $ python manage.py makemigrations
    $ python manage.py migrate
    

    【讨论】:

    • 谢谢,我做到了。
    • 谢谢,我做到了。我目前遇到此错误“/create/super() 参数 1 的 TypeError 必须是类型,而不是 Auction”。请问您知道是什么原因造成的吗? @NixonSparrow
    • 也许添加你的班级名称会有所帮助:super(Auction, self).save(*args, **kwargs)
    • 这是因为您在拍卖对象之前创建了users_bid = None,并且您的模型禁止了这种可能性。您必须执行以下操作之一:1. 将 default=0 添加到 users_bid 字段,或 2. 将 db 中所有 Auction 对象的 users_bid 设置为某个值,并记住不要在没有它的情况下创建对象。
    • 没问题。愿代码对你来说很容易:)
    猜你喜欢
    • 1970-01-01
    • 2021-10-06
    • 2016-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 2019-10-05
    相关资源
    最近更新 更多