[解決済み] 正確な検索のための QuerySet 値は、スライシングを使用して 1 つの結果に制限する必要があります。フィルタ・エラー
2022-03-04 23:04:09
質問
同じスラッグ値をフィルターにかけることができません。問題は、同じスラッグの種類を2つ持つ必要があることで、それを修正する方法がわかりません。私はスラッグ(種類)> 'silikonovyj-chehol'を持つ2つの製品を持っており、私はそれをフィルタリングしようとしましたが、次のようになります。
The QuerySet value for an exact lookup must be limited to one result using slicing.
views.py
def product_list(request, category=None, subcategory=None, kind=None):
if category:
category = Category.objects.get(slug=category)
categories = Category.objects.all()
subcategories = Subcategory.objects.filter(category=category)
products = Product.objects.filter(category=category, available=True)
kinds = None
if subcategory:
subcategory = Subcategory.objects.get(slug=subcategory)
kinds = Kind.objects.filter(kind=subcategory)
products = Product.objects.filter(category=category, subcategory=subcategory, available=True)
if kind:
kind = Kind.objects.filter(slug=kind) # ERROR IT'S HERE
products = Product.objects.filter(category=category, subcategory=subcategory, kind=kind, available=True)
context = {
'categories':categories,
'category':category,
'subcategories':subcategories,
'subcategory':subcategory,
'products':products,
'kinds':kinds,
}
return render(request, 'shop/product/product_list.html', context)
else:
categories = Category.objects.all()
products = Product.objects.filter(available=True)
context = {'categories':categories, 'products':products}
return render(request, 'shop/product/product_list.html', context)
製品リスト.html
{% if subcategory %}
{% for kind in kinds %}
<a href="{% url 'shop:lst_by_knds' category.slug subcategory.slug kind.slug %}">{{ kind.name }}</a>
{% endfor %}
{% endif %}
以下
{% for product in products %}
<div>
<a href="{% url 'shop:product_show' product.slug product.id %}">{{ product.name }}</a>
<br>
{{ product.price }} ₽
<a href="{% url 'cart:cart_create' product.id %}"><button>Добавить в корзину</button></a>
</div>
{% endfor %}
で試しています。
python manage.py shell
>> kind = 'silikonovyj-chehol'
>> Kind.objects.filter(slug=kind)
>> <QuerySet [<Kind: Silicone Case>, <Kind: Silicone Case>]>
models.py
class Category(models.Model):
name = models.CharField(max_length=200, db_index=True)
slug = models.SlugField(max_length=200, db_index=True)
class Subcategory(models.Model):
category = models.ForeignKey(Category, on_delete=models.PROTECT)
name = models.CharField(max_length=200, db_index=True)
slug = models.SlugField(max_length=200, db_index=True)
class Kind(models.Model):
name = models.CharField(max_length=200, db_index=True)
slug = models.SlugField(max_length=200, db_index=True)
kind = models.ForeignKey(Subcategory, on_delete=models.PROTECT)
class Product(models.Model):
category = models.ForeignKey(Category, on_delete=models.PROTECT)
subcategory = models.ForeignKey(Subcategory, on_delete=models.PROTECT)
kind = models.ForeignKey(Kind, on_delete=models.PROTECT)
name = models.CharField(max_length=200, db_index=True)
あるいは、この行を変更すると、次のようになります。
get() returned more than one Kind -- it returned 2! Error
if kind:
kind = Kind.objects.get(slug=kind)
解決方法は?
これです。
products = Product.objects.filter(category=category, subcategory=subcategory, kind=kind, available=True)
のどちらかにする必要があります。
products = Product.objects.filter(category=category, subcategory=subcategory, kind=kind[0], available=True)
をベースにフィルタリングしたい場合 一つ の種類を指定します。
あるいは
products = Product.objects.filter(category=category, subcategory=subcategory, kind__in=kind, available=True)
をフィルタリングしたい場合
Products
すべての
kind
オブジェクトを返します。
関連
-
[解決済み] djangoでDISTINCT個々の列を選択しますか?
-
[解決済み] Django - 円形モデルのインポートの問題
-
[解決済み] "POSTMANを使った画像データの投稿"
-
django.db.utils.OperationalError の解決策です。(2003, "Can't connect to MySQL server") というエラーが発生します。
-
djangoにおけるrelated_nameの役割
-
[解決済み] 正確な検索のための QuerySet 値は、スライシングを使用して 1 つの結果に制限する必要があります。フィルタ・エラー
-
[解決済み] http://127.0.0.1:8000/ には接続できるのに、http://192.168.1.6/ には接続できないのはなぜですか?
-
[解決済み】Djangoのテンプレートにコメントを入れる方法
-
[解決済み】Djangoで空のクエリセットがあるかどうか確認する
-
[解決済み】Djangoプロジェクトの作業ディレクトリ構造に関するベストプラクティス【終了しました
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】DjangoのQuerySetをリストに変換する方法とは?
-
[解決済み] POSTメソッドは常に403 Forbiddenを返します。
-
django.db.utils.OperationalError の解決策です。(2003, "Can't connect to MySQL server") というエラーが発生します。
-
Djangoデータベースのクエリセット操作
-
[解決済み] djangoでモデルオブジェクトを一括作成する
-
[解決済み] ユーザー認証の方法
-
[解決済み】Django: モデルフィールドのリストを取得しますか?
-
[解決済み】Djangoでメールテンプレートを作成する
-
[解決済み】djangoのフォームフィールドでデフォルトで空のクエリセットを作成する
-
[解決済み】reverse()とは何ですか?)