質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

703閲覧

複数検索でキーワードの検索しかできない

sasakicrea

総合スコア0

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/11/30 03:11

編集2021/11/30 09:06

djangoで求人検索機能を作っています
カテゴリ検索複数検索をしたいのですがキーワードの検索しかできないです
選択検索でも検索できるようにしたいです

python

1models.py 2from django.db import models 3from django.db.models.base import Model 4from django.db.models.deletion import PROTECT 5from django.db.models.fields import CharField 6from django.utils import timezone 7 8class Prefecture(models.Model): 9 name = models.CharField('都道府県名', max_length=10) 10 11 class Meta: 12 verbose_name = '都道府県'````````````ここに言語を入力 13 14 verbose_name_plural = '都道府県' 15 16 def __str__(self): 17 return self.name 18 19 20 21class City(models.Model): 22 prefecture = models.ForeignKey(Prefecture, on_delete=PROTECT) 23 name = models.CharField(max_length=24) 24 25 class Meta: 26 verbose_name = '市区町村' 27 verbose_name_plural = '市区町村' 28 29 def __str__(self): 30 return self.name 31 32class Occupation(models.Model): 33 name = models.CharField('職種', max_length=20) 34 35 class Meta: 36 verbose_name = '職種' 37 verbose_name_plural = '職種' 38 39 def __str__(self): 40 return self.name 41 42 43class Industry(models.Model): 44 name = models.CharField('産業', max_length=20) 45 46 class Meta: 47 verbose_name = '業種' 48 verbose_name_plural = '業種' 49 50 def __str__(self): 51 return self.name 52 53 54 55class Salary(models.Model): 56 name = models.CharField('給与', max_length=10) 57 58 class Meta: 59 verbose_name = '年収' 60 verbose_name_plural = '年収' 61 62 def __str__(self): 63 return self.name 64 65 66 67class Tag(models.Model): 68 name = models.CharField('タグ', max_length=20) 69 70 class Meta: 71 verbose_name = 'タグ' 72 verbose_name_plural = 'タグ' 73 74 def __str__(self): 75 return self.name 76 77 78class Time(models.Model): 79 start_time = models.TimeField() 80 end_time = models.TimeField() 81 82 83 84class Post(models.Model): 85 WORK_STYLE = { 86 ('part-time', 'アルバイト'), 87 ('permanent', '正社員'), 88 ('temporary', '派遣社員'), 89 ('other', 'その他'), 90 } 91 92 title = models.CharField('タイトル', max_length=34) 93 content = models.TextField('説明文') 94 Industry = models.ManyToManyField(Industry, verbose_name='業種') 95 occupation = models.ManyToManyField(Occupation, verbose_name='職種') 96 job_description = models.CharField('業務内容', max_length=25) 97 qualifications = models.TextField('応募資格') 98 time = models.TextField('勤務時間', max_length=30) 99 thumbnail = models.ImageField('サムネイル', upload_to='thumbnails/', blank=False) 100 img = models.FileField(upload_to='images/', blank=False, verbose_name='動画') 101 work_style = models.CharField('雇用形態', max_length=20, choices=WORK_STYLE) 102 salary = models.ForeignKey(Salary, verbose_name='年収', on_delete=PROTECT) 103 tag = models.ManyToManyField(Tag, verbose_name='タグ', blank=True) 104 vacation = models.CharField('休日休暇',max_length=30) 105 benefit = models.TextField('福利厚生') 106 prefecture = models.ForeignKey(Prefecture, verbose_name='都道府県', on_delete=PROTECT) 107 city = models.ForeignKey(City, on_delete=PROTECT, verbose_name='市区町村', related_name='pref') 108 created_at = models.DateTimeField('投稿日', default=timezone.now) 109 110 def __str__(self): 111 return self.title 112

python

1filter.html 2 3<h4 class="card-title text-secondary text-center">絞り込み検索</h4> 4 5<form method="GET" action="{% url 'myapp:index' %}"> 6 <div class="form-row"> 7 <div class="form-group col-12"> 8 <div class="input-group"> 9 <input class="form-control py-2 border-right-0 border" type="search" name="title_or_content" placeholder="キーワード" value="{{request.GET.title_or_cintent}}" /> 10 <span class="input-group-append"> 11 <div class="input-group-text bg-transparent"> 12 <i class="fa fa-search"></i> 13 </div> 14 </span> 15 </div> 16 </div> 17 </div> 18 <div class="form-row"> 19 <div class="form-group col-md-12 col-lg-6"> 20 <label for="city">勤務地</label> 21 <select id="city" class="form-control" name="city"> 22 <option selected>勤務地を選択..</option> 23 24 {% for city in citys %} 25 <option value="{{ city }}">{{ city }}</option> 26 {% endfor %} 27 </select> 28 29 </div> 30 <div class="form-group col-md-12 col-lg-6"> 31 <label for="industry">業種</label> 32 <select id="industry" class="form-control" name="industry"> 33 <option selected>業種を選択..</option> 34 35 {% for industry in Industry %} 36 <option value="{{ industry }}">{{ industry }}</option> 37 {% endfor %} 38 </select> 39 40 </div> 41 <div class="form-group col-md-12 col-lg-6"> 42 <label for="occupation">職種</label> 43 <select id="occupation" class="form-control" name="occupation"> 44 <option selected>職種を選択..</option> 45 46 {% for occupation in Occupation %} 47 <option value="{{ occupation }}">{{ occupation }}</option> 48 {% endfor %} 49 </select> 50 51 </div> 52 <div class="form-group col-md-12 col-lg-6"> 53 <label for="occupation">タグ</label> 54 <select id="tag" class="form-control" name="tag"> 55 <option selected>タグを選択..</option> 56 57 {% for tag in tags %} 58 <option value="{{ tag }}">{{ tag }}</option> 59 {% endfor %} 60 </select> 61 62 </div> 63 </div> 64 <button style="width: 100%;" type="submit" class="btn btn-primary">絞り込み</button> 65</form>

python

1views.py 2 3 4def is_valid_q(q): 5 return q != '' and q is not None 6 7def Index(request): 8 post_list = Post.objects.all().order_by('-created_at') 9 title_or_content = request.GET.get('title_or_content') 10 city = request.GET.get('city.prefecture__city') 11 industry = request.GET.get('Industry__name') 12 occupation = request.GET.get('occupation__name') 13 tag = request.GET.get('tag__name') 14 15 if is_valid_q(title_or_content): 16 post_list = post_list.filter( 17 Q(title__icontains=title_or_content)| 18 Q(content__icontains=title_or_content) 19 ).distinct() 20 21 if is_valid_q(city) and city != '勤務地を選択..': 22 post_list = post_list.filter(city__city=city) 23 24 if is_valid_q(industry) and industry != '業種を選択..': 25 post_list = post_list.filter(Industry__Industry__Industry=Industry) 26 27 if is_valid_q(occupation) and occupation != '職種を選択..': 28 post_list = post_list.filter(occupation__occupation=occupation) 29 30 if is_valid_q(tag) and tag != 'タグを選択..': 31 post_list = post_list.filter(tag__tag=tag) 32 33 34 35 return render(request, 'myapp/index.html', 36 {'post_list': post_list, 'title_or_content': title_or_content, 'city': city, 'industry': industry, 'occupation': occupation, 'tag': tag })

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

siruku6

2021/12/12 00:54

質問の意図がよくわからないため、どこで詰まっているのか回答すべきことが何なのかがわかりません。 具体的には、 「キーワードの検索しかできないです」 「選択検索」 このあたりの言葉をもっと具体的に説明し、ソースコード内で言うとそれらがどこにあたるのかまで説明すると良いかもしれません。 さらに、エラーが発生していればエラー内容を書く、期待した結果が起きていないとしても何か変化が起きているの場合は、いったいどんな事象が発生しているのかまで記載すると、より回答が得られやすくなると思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問