我的Django中的CSV导入代码有什么问题?

时间:2015-02-15 09:46:41

标签: django

我已覆盖我的管理员change_list.html

{% extends "admin/change_list.html" %}

{% block object-tools-items %}

    <li>
        <a href="importcsv/" class="grp-state-focus" class="addlink">Import CSV</a>
    </li>
    {{ block.super }}

{% endblock %}

当我点击此导入CSV链接时,我想导入CSV并保存到我的模型。

应用程序名称拍卖。拍卖对象:

forms.py

from django import forms
import csv
from auction.models import AuctionGroup, AuctionHouse, AuctionList

class DataInput(forms.Form):
    file = forms.FileField()


def save(self):
    records = csv.reader(self.cleaned_data["file"])
    for line in records:
        house = AuctionHouse()
        house.house_name = line[0]
        house.auction_type = line[1]
        house.auction_day = line[2]
        house.volume = line[3]
        house.aleado_id = line[4]
        house.aleado_photo_number = line[5]
        house.house_region = line[6]
        house.save()

views.py

def csv_import(request):
    if request.method == "POST":
        form = DataInput(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            success = True
            context = {"form": form, "success": success}
            return render_to_response("auction/importcsv.html", context,
            context_instance=RequestContext(request))
    else:
        form = DataInput()
        context = {"form": form}
        return render_to_response("auction/importcsv.html", context,
        context_instance=RequestContext(request))

urls.py

urlpatterns = patterns('',  
    url(r'/importcsv/$', views.csv_import, name='importcsv'),
)

项目/ urls.py

urlpatterns = patterns('',
    url(r'^auction/', include('auction.urls')),
    url(r'^admin/', include(admin.site.urls)),
)

importcsv.html

<!DOCTYPE html>
<html>
    <form enctype="multipart/form-data" method="post" action=".">
        {{ form }}
    </form>
</html>

但它不起作用。请帮忙。此致

1 个答案:

答案 0 :(得分:0)

使用链接代码中的{% url %}标记:

<a href="{% url 'importcsv' %}" class="grp-state-focus addlink">Import CSV</a>

如果您想为多个模型使用单个模板,则change_list.html具有cl.opts上下文变量,该变量是当前模型的Model._meta

因此,您可以将app_labelmodel_name传递到importcsv()视图:

<a href="{% url 'importcsv' cl.opts.app_label cl.opts.model_name %}"
                             class="grp-state-focus addlink">Import CSV</a>

更改您的urls.py

urlpatterns = patterns('',  
    url(r'/importcsv/(\w+)/(\w+)/$', views.csv_import, name='importcsv'),
)

视图功能的签名:

def csv_import(request, app_label, model_name):
    ...