【问题标题】:Django - What is wrong with my view function?Django - 我的视图功能有什么问题?
【发布时间】:2021-06-17 10:02:30
【问题描述】:

在此函数中,脚本无法通过第二个 if 语句。

def save_data(request):
    if request.method == 'POST':
        if request.POST.get('id')\
        and request.POST.get('id1')\
        and request.POST.get('id2'):
            try:
                print('if2')
                data=Flow()
                data.id = request.POST.get('id')
                data.id1 = request.POST.get('id1')
                data.id2 = request.POST.get('id2')
                data.save()
            except Exception as e:
                print(e)

我的问题很简单,为什么会这样?

如果我完全删除 if/and 阻止,我会得到:

ValidationError ['“on” value must be either True or False.']

如果我删除除一个之外的所有 ands,我就会遇到最初的问题 - 我的数据库中没有显示任何内容,但也没有显示任何错误。

网址格式:

    path('io/save_data', views.save_data, name='save_data')

型号:

class Flow(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE, default=None)
    datetime = models.DateTimeField(default=timezone.now)
    id = models.BooleanField(default=False, blank=False)
    id1 = models.BooleanField(default=True, blank=False)
    id2 = models.DecimalField(max_digits = 100, decimal_places = 5, default=1)

【问题讨论】:

  • @FabriceJaouën 在代码的哪一部分?首先? | if request.POST['id']: |还是第二? | data.id = request.POST['id'] |
  • 您也可以发布您的模板吗?

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


【解决方案1】:

为什么需要 try & except ?为什么不在最后使用 else 语句?

这也是为什么:

if request.POST.get('id')\
    and request.POST.get('id1')\
    and request.POST.get('id2'):

希望看到更多代码:)

【讨论】:

  • 我希望我有充分的理由,但这基本上就是我过去构建视图函数以将表单输入保存到数据库的方式。 try & except 只是我试图让它显示错误。我现在正在更新帖子。
【解决方案2】:

尝试改成这样:

data.id = True if request.POST.get('id') == “True” else False

data.id1 = True if request.POST.get('id1') == “True” else False

【讨论】:

  • 请上传模板文件和forms.py的代码
【解决方案3】:

由于我还没有看到您的 HTML 模板,因此我将添加这一点以作为衡量标准。仔细检查字段的名称是否与您在视图中的名称相同。

您还应该考虑使用 Django-forms 在您的代码库中进行更好的验证和检查。表格非常有用。请参阅文档here

至于你的代码,检查了以上两点后,试试这个。

def save_data(request):
    if request.method == 'POST':
        id = request.POST.get('id')
        id1 = request.POST.get('id1')
        id2 = request.POST.get('id2')
        Flow.objects.create(id=id, id1=id1, id2=id2)

试试这个,如果有任何创建,请告诉我。

【讨论】:

  • 我已经搞砸了几个小时,但我不断收到一个表单字段的意外关键字参数。我认为问题可能是由于我试图使用作者和日期/时间而没有在我的观点中提及它们。我已经使用 forms.ModelForm 构建了一个表单,但无法实现它。
  • 在您更新 HTML 模板以查看您正在使用的表单之前,我无法提供更多帮助。
猜你喜欢
  • 1970-01-01
  • 2012-05-27
  • 1970-01-01
  • 2018-02-19
  • 2015-05-27
  • 2018-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多