管理员输入后,Django管理数据库无法正确更新

时间:2014-04-01 00:54:45

标签: python django postgresql web

我遇到了一个问题,如果我在管理页面中删除了一个产品,那么链接到剩余产品的模板创建的所有URL都不再起作用,每个页面都会出现错误&# 34;没有图像匹配给定的查询。"

例如,如果只剩下一个产品,则从模板打印的URL应为... / products / 1,而是显示为../products/3,它们指向任何内容。如果我手动指向/ products / 1进一步引起混淆,我也会得到相同的错误

我猜测问题是由于Image和Product之间的外键关系或db如何使用product_image_id但我无法弄明白。请帮助!

模型

class Product(models.Model):
    product_name = models.CharField(max_length=200)
    product_type = models.CharField(max_length=200)
    product_description = models.TextField()
    def __unicode__(self):
        return self.product_name

class Image(models.Model):
    product_image = models.ForeignKey(Product)
    image = models.ImageField(upload_to='image')

视图

def productindex(request):
    product_list = Product.objects.all()
    context = {'product_list' : product_list}
    return render(request, 'polls/products.html', context)

def productpage(request, product_image_id):
    product = get_object_or_404(Product, pk=product_image_id)
    image = get_object_or_404(Image, pk=product_image_id)
    product_list = Product.objects.all()
    return render(request, 'polls/productpage.html', {'product': product, 'image': image,     'product_list' : product_list})

网址

url(r'products/(?P<product_image_id>\d+)/$', views.productpage, name='productpage'),

模板

   {% for product in product_list %}
<a href="{% url 'polls:productpage' product.id %}"><li class="procont"></li></a>
   {% endfor %}

2 个答案:

答案 0 :(得分:0)

您应确保在每个部分中引用正确的对象。对于您的产品页面,您应该在product_id

中传递网址

然后在您的观看中,您检索该产品,但不是使用pk获取图像,而是应该product.image_set.all()获取与该产品相关的所有图像。

仔细检查教程:https://docs.djangoproject.com/en/dev/intro/tutorial01/

在这种情况下,“问题”是您的产品,“选择”是您的形象。


以下是AllTheTime到达的最终解决方案。

网址

    url(r'products/(?P<product_id>\d+)/$', views.productpage, name='productpage'),

视图

def productpage(request, product_id):
    product_list = Product.objects.all()
    product = get_object_or_404(Product, pk=product_id)
    image = product.image_set.all()
    return render(request, 'polls/productpage.html', {'product': product, 'image': image,     'product_list' : product_list})

答案 1 :(得分:0)

根据jef79m的帮助,我得出了解决问题的这些结论

网址

    url(r'products/(?P<product_id>\d+)/$', views.productpage, name='productpage'),

视图

def productpage(request, product_id):
    product_list = Product.objects.all()
    product = get_object_or_404(Product, pk=product_id)
    image = product.image_set.all()
    return render(request, 'polls/productpage.html', {'product': product, 'image': image,     'product_list' : product_list})