社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

Django:在提交表单后获取最新的数据库对象值

Jaco • 6 年前 • 2282 次点击  

我有一个表单,它将三个输入值保存到一个数据库,1)数字,2)颜色,3)品牌。 在我按下“提交”之后,另一个例程应该立即显示这些值。

问题是,我无法显示最新的值,但是,一旦这些值被最初分配,它们就不会更新并坚持第一个分配的值。

为了解决这个问题,posts建议更新这个对象,比如 Django Get Latest Entry from Database ,我创建了一个函数,在按下submit之后,我在view中调用了它,但是没有运气。

from django.forms import ModelForm
from django.views.generic import FormView
from django.urls import path, include
from django.urls import reverse


class Product(models.Model):
    number = models.CharField(max_length=10)
    color = models.CharField(max_length=10)
    make = models.CharField(max_length=10)

    objects = models.Manager()

class ProductModelForm(ModelForm):
    class Meta:
        model = Product
        fields = ('__all__')


def database():
    dbo = Product.objects.latest('id')
    dbo.refresh_from_db()
    return dbo


class ProductFormView(FormView):
    form_class = ProductModelForm
    template_name = 'form/test_form.html'

    def form_valid(self, form):
        form.save()
        return super().form_valid(form)

    def get_success_url(self):
        database()
        print(Product.objects.latest('id'))  # just as a test
        return reverse('product')



urlpatterns = [
    path('', ProductFormView.as_view(), name='product'),
]

# <!DOCTYPE html>
# <html lang="en">
# <head>
#     <meta charset="UTF-8">
#     <title>Title</title>
# </head>
# <body>
# <form method="post" >
#     {% csrf_token %}
#     {{form}}
#     <button type="submit" class="btn btn-default">Submit</button>
# </form>
# </body>
# </html>

我有一个简单的例程(db_connector.py)我在数据库对象和变量之间创建一个链接,例如(没有任何函数或类):

number = database().number
color = database().color
make = database().make

这可能是错误的做法,但反映了(可能是天真的)试图最小化数据库请求的想法,即请求一个对象,然后将该对象拆分为多个部分并链接到各个部分。

问题是:

  • 我更新表单中的所有值,然后按submit(这有效),这个最新的条目现在位于数据库的“顶部”。我要检索此对象(“number”、“color”和“make”的最新输入值)。但是,我得到的不是这个对象,而是一个更早的对象。尽管尝试“刷新”链接对象(Product.objects.latest('id')),但它仍然停留在较早的输入(第一个输入)上。

问题是:

  • 我应该怎么做,总是得到最新的输入值,一旦我按提交在我的表单上(与更新的值)?
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/49928
文章 [ 2 ]  |  最新文章 6 年前