python - 相关字段查找无效:title_icontains
问题描述
我的模型.py:
from django.conf import settings
from django.db import models
from django.db.models.signals import pre_save, post_save
from django.urls import reverse
from django.utils.text import slugify
# Create your models here.
class Stocks(models.Model):
title = models.ForeignKey('Product', verbose_name="Ürün", on_delete=models.CASCADE)
stock = models.DecimalField(max_digits=3,decimal_places=0,default=0,verbose_name="Stok")
seller = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.CASCADE)
price = models.DecimalField(max_digits=100,decimal_places=2,default=0.00,verbose_name="Fiyat")
def __str__(self):
return str(self.title)
class Meta:
verbose_name = "Stok"
verbose_name_plural = "Stoklar"
def upload_image_location(instance, filename):
return "%s/%s" %(instance.id, filename)
class Product(models.Model):
title = models.CharField(max_length=100,verbose_name="Başlık")
slug = models.SlugField(blank=True, unique=True)
category = models.ForeignKey('Category', null=True, blank=True, verbose_name="Kategori",on_delete=models.CASCADE)
description = models.TextField(null=True,blank=True,verbose_name="Ürün Açıklaması")
price = models.DecimalField(max_digits=100,decimal_places=2,default=0.00,verbose_name="Fiyat")
sale_price = models.DecimalField(max_digits=100,decimal_places=2,default=0.00,null=True,blank=True,verbose_name="İndirimli Fiyat")
tax = models.DecimalField(max_digits=3,default=18,decimal_places=0,verbose_name="KDV")
status = models.BooleanField(default=True,verbose_name="Aktif/Pasif")
image1 = models.FileField(blank=True,null=True,upload_to=upload_image_location,verbose_name="Vitrin Fotoğrafı")
image2 = models.FileField(blank=True,null=True,upload_to=upload_image_location,verbose_name="Galeri Fotoğrafı 1")
image3 = models.FileField(blank=True,null=True,upload_to=upload_image_location,verbose_name="Galeri Fotoğrafı 2")
image4 = models.FileField(blank=True,null=True,upload_to=upload_image_location,verbose_name="Galeri Fotoğrafı 3")
image5 = models.FileField(blank=True,null=True,upload_to=upload_image_location,verbose_name="Galeri Fotoğrafı 4")
def get_absolute_url(self):
view_name = "detail_slug"
return reverse(view_name, kwargs={"slug": self.slug})
def __str__(self):
return self.title
class Meta:
verbose_name = 'Ürün'
verbose_name_plural = 'Ürünler'
def create_slug(instance, new_slug=None):
slug = slugify(instance.title)
if new_slug is not None:
slug = new_slug
qs = Product.objects.filter(slug=slug)
exists = qs.exists()
if exists:
new_slug = "%s-%s" %(slug, qs.first().id)
return create_slug(instance, new_slug=new_slug)
return slug
def product_pre_save_reciever(sender, instance, *args, **kwargs):
if not instance.slug:
instance.slug = create_slug(instance)
pre_save.connect(product_pre_save_reciever, sender=Product)
我的观点.py
class ProductDetailView(LoginRequiredMixin, MultiSlugMixin, DetailView):
model = Product
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
product_name = self.object.title
data = Stocks.objects.filter(title__icontains=product_name).order_by('price')
context['stocks'] = data
return context
网址.py
from django.urls import path
from products import views
from products.views import (
CategoryCreateView,
CategoryUpdateView,
ProductCreateView,
ProductListView,
ProductDetailView,
ProductUpdateView,
)
urlpatterns = [
path('urunler/', ProductListView.as_view(), name='list'),
path('urunler/ekle/', ProductCreateView.as_view(), name='create'),
path('urunler/duzenle/<int:pk>/', ProductUpdateView.as_view(), name='update'),
path('urunler/duzenle/<slug>/', ProductUpdateView.as_view(), name='update_slug'),
path('urunler/<int:pk>/', ProductDetailView.as_view(), name='detail'),
path('urunler/<slug>/', ProductDetailView.as_view(), name='detail_slug'),
path('kategori/ekle/', CategoryCreateView.as_view(), name='add_category'),
path('kategori/duzenle/<int:pk>/', CategoryUpdateView.as_view(), name='update_category'),
path('kategori/duzenle/<slug>/', CategoryUpdateView.as_view(), name='update_slug_category'),
]
我正在尝试在产品详细信息页面上显示相关的股票记录。
当我访问产品详细信息页面时,我收到此错误。“相关字段查找无效:icontains” domain.com:8000/urunler/16(例如)
我需要更正 ProductDetailView 类和 get_context_data 函数,但是如何:)
有什么帮助吗?
解决方案
你给你的字段起奇怪的名字,这让你很困惑。title
不是标题,而是 Product 模型的 ForeignKey,它本身有一个title
属性。
这会起作用:
data = Stocks.objects.filter(title__title__icontains=product_name).order_by('price')
但实际上您应该将该字段重命名为合理的名称,例如product
,这样您就可以这样做product__title__icontains
。
推荐阅读
- jquery - 如何将 $scope.value 名称放入 $('input:radio[name="optradio"][value="$scope.t_color"]') .attr('checked', true);
- angular - Angular 8 - 自动刷新指令
- node.js - 反应原生 | 取消承诺 JSON Parse 错误
- javascript - 鼠标悬停随机颜色
- google-cloud-firestore - Firestore 安全规则:比较地图数组
- php - 带有 Lumen Framework 授权的 API 不起作用
- android - SAF - DocumentsContract.createDocument 方法中的无效 URI 错误(FileOutputStream 副本)
- android - 为什么 google play 开发者控制台显示最新的应用程序安装但不显示卸载?
- jsf - 在 JSF 多级模板中扩展特定部分的最佳方法
- pdf - 如果 Google Drive 文件夹中已存在同名文件,则附加代码以覆盖 PDF