我有一个表单,它将三个输入值保存到一个数据库,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')),但它仍然停留在较早的输入(第一个输入)上。
问题是:
-
我应该怎么做,总是得到最新的输入值,一旦我按提交在我的表单上(与更新的值)?