【问题标题】:How can I move data from views.py to a models.py in python/django in this case?在这种情况下,如何在 python/django 中将数据从 views.py 移动到 models.py?
【发布时间】:2018-01-10 21:09:28
【问题描述】:

我将这些文件按数据传输的顺序排列。首先,用户通过添加文件上的 Charfield 提交一个代码。然后 add 函数通过提交代码值来创建 score 类的实例,这很有效。我也在加法中计算点数,但我也想不出一种将点数发送到模型中的类的方法。

我在 StackOverflow 上看到的所有示例通常在类中都有与某些 CharField 或 ForeignKey 相关的变量。那么可以向 score() 发送积分吗?

我也知道 scoreCalculate 有效。

此代码生成的错误:

File "~/models.py", line 6, in score
    points;     

NameError: name 'points' is not defined

当然没有定义,只是不知道怎么定义。

添加.html

<form action="{% url 'add' %}" method="post">
{% csrf_token %}

    <label for="ticker">Ticker</label><br />
    <input type="text" name="ticker" id="ticker"/>
    <br><br>
    <input type="submit" value="submit" />

</form>

views.py

from django.shortcuts import render, redirect
from django.http import HttpResponse

from .models import score
from Rssfeed import scoreCalculate

def add(request):
    if(request.method == 'POST'):
        ticker = request.POST['ticker']

        pts = scoreCalculate(ticker=ticker)
        sc = score(ticker = ticker)

        sc.save()

        return redirect('/')
    else:
        return render(request, 'add.html')

models.py

from django.db import models
from datetime import datetime

class score(models.Model):

    ticker = models.CharField(max_length=10)
    points; #not sure what to put here
    created_at = models.DateTimeField(default=datetime.now, blank=True)

【问题讨论】:

  • 这个问题没有多大意义。如果要在模型上保存points,它需要是一个字段。如果没有,为什么要“发送”给模型?你到底在做什么?
  • 我希望能够存储它们,这样我就可以在页面上打印 10 个最近搜索的代码和它们的点。我从教程中获得了几乎所有的信息,所以我的工具集是有限的。有没有更简单的方法来存储和检索代码及其各自的点?

标签: python django


【解决方案1】:

创建时只需将分数放入 score 对象中即可。

在views.py 中,创建score 对象时使用以下行:

sc = score(ticker=ticker, points=pts)

在 models.py 中,在您的评分模型中使用以下字段:

class score(models.Model):

    ticker = models.CharField(max_length=10)
    points = models.IntegerField()
    created_at = models.DateTimeField(default=datetime.now, blank=True)

【讨论】:

  • 随之而来的新错误是 /add 处的 OperationalError (1054, "Unknown column 'points' in 'field list'")。现在听起来像是一个 mysql 错误。
  • 你记得python manage.py makemigrations; python manage.py migrate吗?
  • 是的,django.db.utils.OperationalError: (1054, "Unknown column 'senty_score.points' in 'field list'") 我再次尝试以防万一,结果接近运行网站时出现同样的错误。
【解决方案2】:

您似乎只是想找到一种将积分存储在记分板上的方法。如果这是真的,那么您应该将分数添加为整数/小数字段,让模型为您处理存储。

类似这样的:

类分数(models.Model):

ticker = models.CharField(max_length=10)
points = models.DecimalField(max_digits=3, decimal_places=1)
created_at = models.DateTimeField(default=datetime.now, blank=True)

或整数:

class score(models.Model):

ticker = models.CharField(max_length=10)
points = models.IntegerField()
created_at = models.DateTimeField(default=datetime.now, blank=True)

【讨论】:

  • 迁移后有效。现在我只有某种 Mysql 错误:'字段列表'中的未知列 'points'”这是一个 python 问题,但你知道如何解决吗?
  • 我发现有时由于 SQL 服务器问题导致 SQL 迁移失败。查看迁移文件并尝试手动运行 SQL。如果它给您一个错误,您可能必须使用您的 SQL 界面手动将列添加到表中。
猜你喜欢
  • 2019-11-12
  • 2020-12-02
  • 2018-01-29
  • 1970-01-01
  • 2022-11-02
  • 2019-11-15
  • 1970-01-01
  • 2012-10-11
  • 2017-08-29
相关资源
最近更新 更多