将Django数据模型下载为cs

2024-07-04 08:03:03 发布

您现在位置:Python中文网/ 问答频道 /正文

如何将从Django站点收集的数据转换为.csv文件下载。我希望它是这样的,在django admin中有一个按钮,可以将所有数据作为.csv文件下载

这是我的模型:

from django.db import models


class Auto(models.Model):

    YNC = (
        ('N', 'No'),
        ('Y', 'Yes'),
    )
    NYC = (
        ('N', 'No'),
        ('Y', 'Yes'),   
    )
    NNY = (
        ('N', 'No'),
        ('Y', 'Yes'),
    )

    nw = (
        (1, 'Really Bad'),
        (1, 'Bad'),
        (3, 'Average'),
        (4, 'Good'),
        (5, 'Really Good'),
    )

    Team = models.CharField()
    Scout = models.CharField()

    StartWithCubeLoaded = models.CharField(max_length = 1, choices = YNC, default = 'N')
    CrossAutoLine = models.CharField(max_length = 1, choices = YNC, default = 'N')
    RobotCrossCenterLine = models.CharField(max_length = 1, choices = YNC, default = 'N')
    PlaceCubeInWrongScale = models.CharField(max_length = 1, choices = YNC, default = 'N')
    RobotHitOtherAllianceRobotInNullZone = models.CharField(max_length = 1, choices = YNC, default = 'N')
    MisPlaceCube = models.CharField(max_length = 1, choices = YNC, default = 'N')
    DroppedCubes = models.IntegerField(default = 0)
    DoubleStackScale = models.CharField(max_length = 1, choices = NYC, default = 'N')
    Foul = models.CharField(max_length = 1, choices = NYC, default = 'N')
    KnockedOffCubes = models.IntegerField(default = 0)
    MissedCubes = models.IntegerField(default = 0)
    Climbed = models.CharField(max_length=1, choices=NNY, default = 'N')
    ClimbTime = models.IntegerField(default=0)
    Lifted2Robots = models.CharField(max_length=1, choices=NNY, default = 'N')
    ProvidedBar = models.CharField(max_length=1, choices=NNY, default = 'N')
    ProvidedRamp = models.CharField(max_length=1, choices=NNY, default = 'N')
    GrabFieldBar = models.CharField(max_length=1, choices=NNY, default = 'N')
    ClimbAttempted = models.CharField(max_length=1, choices=NNY, default = 'N')
    GrabRobotBar = models.CharField(max_length=1, choices=NNY, default = 'N')
    ClimbRobotRamp = models.CharField(max_length=1, choices=NNY, default = 'N')
    NoShow = models.CharField(max_length=1, choices=NNY, default = 'N')
    TippedOver = models.CharField(max_length=1, choices=NNY, default = 'N')
    Broke = models.CharField(max_length=1, choices=NNY, default = 'N')
    TeamWork = models.IntegerField(choices = nw, default = 'Really Bad')
    PickingUpCubes = models.IntegerField(choices = nw, default = 'Really Bad')
    Driving = models.IntegerField(choices = nw, default = 'Really Bad')
    PlacingCubes = models.IntegerField(choices = nw, default = 'Really Bad')

在视图.py公司名称:

^{pr2}$

在网址.py公司名称:

from django.conf.urls import url
from django.contrib import admin
from system.views import index, dcsv

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$', index),
    url(r'^$', dcsv),
]

在索引.html公司名称:

<!DOCTYPE html>
<html>
    <head>
        <!-- UIkit CSS -->
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/uikit/3.0.0-beta.38/css/uikit.min.css" />

        <!-- UIkit JS -->
        <script src="https://cdnjs.cloudflare.com/ajax/libs/uikit/3.0.0-beta.38/js/uikit.min.js"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/uikit/3.0.0-beta.38/js/uikit-icons.min.js"></script>
        <link href="https://fonts.googleapis.com/css?family=Abril+Fatface" rel="stylesheet">
        <style>
            .uk-logo{
                font-family: 'Abril Fatface' !important;
                color: black !important;
            }
            .qf{
                font-family: 'Abril Fatface' !important;
                color: black !important;
            }
        </style>
    </head>
    <body>
        <nav class="uk-navbar-container uk-margin uk-navbar-transparent" uk-navbar="mode: click">
            <div class="uk-navbar-left">
                <a class="uk-navbar-item uk-logo" href="#">Nav</a>
                <ul class="uk-navbar-nav">
                    <li class="uk-active"><a class="qf"href="#">Nav</a></li>
                    <li><a class="qf" href="#">Nav</a></li>
                    <li><a class="qf"href="#">Nav</a></li>
                </ul>

            </div>
        </nav>

            <h1></h1>
            <form method="POST" class="post-form">{% csrf_token %}
                {{ form.as_p }}
                <button type="submit" class="save btn btn-default">Save</button>
            </form>
    </body>
</html>

我在网上找到了答案,但他们用的是老的django版本。我使用的django版本是1.11。在


Tags: djangodefaultmodelslengthmaxclasschoicesbad
1条回答
网友
1楼 · 发布于 2024-07-04 08:03:03

创建另一个视图类/函数并将其定义为网址.py并将以下代码放入新的视图函数/类中。
需要在文件顶部导入 from django.http import HttpResponse

response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="filename.csv"'
writer = csv.writer(response)
writer.writerow(['column1','column2','column3'])
data = Auto.objects.filter()
for row in data:
    rowobj = [row.column1,row.column2,row.column3]
    writer.writerow(rowobj)
return response 

在html文件中添加link或button,并通过调用函数使用button在link或change form操作中导航到新的URL。这将开始下载csv文件。在

您似乎对django将url行更改为

^{pr2}$

column1,column2,column3只是示例,用字段名替换它们。在

相关问题 更多 >

    热门问题