【问题标题】:Showing duplicate data after the data is changed and refresh the page in django python数据更改后显示重复数据并在django python中刷新页面
【发布时间】:2022-12-07 07:12:26
【问题描述】:

我只想在本地主机上显示一次数据,因为它会出现两次,无论我在哪里更改 data.py 并刷新页面,都会添加新的数据层。

所以如果数据是

titles = {
    "data": [
        {
            "sid": "1234",
            "name": "name_1"
        },
        {
            "sid": "5678",
            "name": "name_2"
        },
        {
            "sid": "9012",
            "name": "name_3"
        }
    ]
} 

那么它应该出现在输出中

SD      Name
1234    name_1
5678    name_2
9012    name_3

所以如果我更改 data.py 文件中的数据

titles = {
    "data": [
        {
            "sid": "0000",
            "name": "name_1"
        },
        {
            "sid": "12313",
            "name": "name_2"
        },
        {
            "sid": "543534",
            "name": "name_3"
        }
    ]
}

输出应该是这样的

SD      Name
0000    name_1
12313   name_2
543534  name_3

当前输出是

SD      Name
1234    name_1
5678    name_2
9012    name_3
0000    name_1
12313   name_2
543534  name_3

输出是添加以前的记录。我想要的是刷新后它应该出现在 data.py 文件中的当前数据

views.py

from django.shortcuts import render
from .models import Title

def get(request):
    context = {'titles': Title.objects.all()}
    return render(request, "home.html", context)

home.html

<!DOCTYPE html>
<html lang="en">
<head>
  <title>TableView - Startup</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"></script>
</head>
<body>

<div class="container">
  <h2 class="text-center"><u>Data</u></h2><br>
  <table class="table table-dark table-striped">
    <thead>
      <tr>
        <th>SD</th>
        <th>Name</th>
      </tr>
    </thead>
    <tbody>
    {% for title in titles %}
      <tr>
        <td>{{title.sd}}</td>
        <td>{{title.name}}</td>
      </tr>
    {% endfor %}
    </tbody>
  </table>
</div>

</body>
</html>

models.py

from django.db import models
from data import titles

class Title(models.Model):
    sd = models.CharField(max_length=255)
    name = models.CharField(max_length=255)  # Read the JSON


# Create a Django model object for each object in the JSON
for title in titles['data']:
    Title.objects.create(sd=title['sid'], name=title['name'])

data.py

titles = {
    "data": [
        {
            "sid": "0000",
            "name": "name_1"
        },
        {
            "sid": "12313",
            "name": "name_2"
        },
        {
            "sid": "543534",
            "name": "name_3"
        }
    ]
}
``

【问题讨论】:

  • Title.objects.create(sd=title['sid'], name=title['name']) 创建新的 Title 对象,它不会删除旧的。如果你想替换它们,你可以使用delete
  • @raphael 谢谢先生。有效。我添加了这一行并在逻辑中相应地删除它并且它有效 Title.objects.all().delete()
  • 但我还在等着看其他方法

标签: python-3.x django django-models django-rest-framework django-views


【解决方案1】:

我通过在 views.py 中添加这段代码来解决

def getting_all_data():
for title in titles['data']:
    Title.objects.create(sd=title['sid'], name=title['name'])


def get(request):
    if list(Title.objects.all()):
        Title.objects.all().delete()
        getting_all_data()
        object_handler = Title.objects.all()
    else:
        getting_all_data()
        object_handler = Title.objects.all()
    context = {'titles': object_handler}
    return render(request, "home.html", context)

【讨论】:

    猜你喜欢
    • 2012-01-08
    • 1970-01-01
    • 2016-12-24
    • 2015-09-07
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 2017-11-05
    • 1970-01-01
    相关资源
    最近更新 更多