Django 模型从创建新记录而不是更新旧记录
Django model from create a new record instead of updating old one
我是 Django 的初学者。我的问题是我更新了我的记录,但它添加了一条新记录而不是更新旧记录。
我哪里错了?
views.py
class EditProduct(TemplateView):
template_name = 'stock/editproduct.html'
def get(self, request, product_id):
productedit = get_object_or_404(Product, pk=product_id)
data=Product.objects.get(id=product_id)
form = EditProductForm(instance=data)
args = {'form':form, 'productedit':productedit}
return render(request, self.template_name, args)
def post(self, request, product_id):
form = EditProductForm(request.POST, request.FILES)
if form.is_valid():
productadded = form.save(commit=False)
productadded.saler = request.user
productadded.pub_date = timezone.datetime.now()
productadded.save()
return redirect('stock')
else:
args = {'form': form}
return render(request, self.template_name, args)
我假设 stock 是 app/folder 的名称,其中包含 views.py、models.py、url.py。
views.py 有关 UpdateViews 的文档,请参阅 here。
from django.views.generic import UpdateView
from django.utils import timezone
from stock.models import Product
from stock.forms import EditProductForm
Class ProductUpdateView(UpdateView):
model = Product
form_class = EditProductForm
success_url = reverse_lazy('stock:product_list')
template_name = 'stock/editproduct.html'
def form_valid(self, form):
form.instance.saler = self.request.user
form.instance.pub_date = timezone.now()
return super().form_valid(form)
urls.py
from stock import views
app_name = 'stock'
urlpatterns = [
path('product/update/<int:pk>', views.ProductUpdateView.as_view(), name='product_update'),
path('product/list', views.ProductListView.as_view(), name='product_list'
]
下面的代码片段可以添加到您要更新的产品页面的 html,这通常是由详细信息视图 class 或功能生成的产品详细信息页面。
在该页面上添加一个按钮,将您带到更新页面,传递您要更新的产品的 ID。
<a class="btn btn-outline-warning waves-effect" href="{% url 'stock:product_update' pk=product.pk %}"> Update product</a>
我是 Django 的初学者。我的问题是我更新了我的记录,但它添加了一条新记录而不是更新旧记录。
我哪里错了?
views.py
class EditProduct(TemplateView):
template_name = 'stock/editproduct.html'
def get(self, request, product_id):
productedit = get_object_or_404(Product, pk=product_id)
data=Product.objects.get(id=product_id)
form = EditProductForm(instance=data)
args = {'form':form, 'productedit':productedit}
return render(request, self.template_name, args)
def post(self, request, product_id):
form = EditProductForm(request.POST, request.FILES)
if form.is_valid():
productadded = form.save(commit=False)
productadded.saler = request.user
productadded.pub_date = timezone.datetime.now()
productadded.save()
return redirect('stock')
else:
args = {'form': form}
return render(request, self.template_name, args)
我假设 stock 是 app/folder 的名称,其中包含 views.py、models.py、url.py。
views.py 有关 UpdateViews 的文档,请参阅 here。
from django.views.generic import UpdateView
from django.utils import timezone
from stock.models import Product
from stock.forms import EditProductForm
Class ProductUpdateView(UpdateView):
model = Product
form_class = EditProductForm
success_url = reverse_lazy('stock:product_list')
template_name = 'stock/editproduct.html'
def form_valid(self, form):
form.instance.saler = self.request.user
form.instance.pub_date = timezone.now()
return super().form_valid(form)
urls.py
from stock import views
app_name = 'stock'
urlpatterns = [
path('product/update/<int:pk>', views.ProductUpdateView.as_view(), name='product_update'),
path('product/list', views.ProductListView.as_view(), name='product_list'
]
下面的代码片段可以添加到您要更新的产品页面的 html,这通常是由详细信息视图 class 或功能生成的产品详细信息页面。
在该页面上添加一个按钮,将您带到更新页面,传递您要更新的产品的 ID。
<a class="btn btn-outline-warning waves-effect" href="{% url 'stock:product_update' pk=product.pk %}"> Update product</a>