Forum: PC-Programmierung Django dynamischer Filter im Template


von Seba (Gast)


Lesenswert?

Hallo,

ich habe ein bestehendes Django Projekt und möchte im Template diverse 
Filter nutzen. Dazu such ich nach ein paar Ideen, wie man das am 
Sinnvollsten machen kann.

Vorzugsweise würde ich das gerne mit so einem Toggle Slider machen wie 
hier:

https://www.w3schools.com/howto/howto_css_switch.asp

In der Django Datenbank habe ich ein Boleanfield "is_favorite" das der 
Toggle Slider nutzen soll.


Also, wenn der Toggle Slider aktiviert ist, dann sollen alle 
aufgelisteten Eintrage die nicht "1" in der Datenbank haben 
verschiwinden. Allerdings stehe ich gerade auf der Leitung wie ich das 
am besten hinbekomme.
1
models.py
2
class Request_Review(models.Model):
3
    user = models.ForeignKey(User, on_delete=models.CASCADE, default=1)
4
    request_date = models.DateTimeField(auto_now_add=True)
5
    request_user = models.CharField(default='', blank=True, max_length=100)
6
    is_favorite = models.BooleanField(default=False)
1
urls.py
2
urlpatterns = [
3
    url(r'^$',  views.home, name='home'),
1
views.py
2
def home(request, album_id):
3
    user = request.user
4
     albums = Request_Review.objects.filter(user=request.user).order_by('-request_date')[:24]
5
    albums_search = Request_Review.objects.filter().order_by('-request_date')
6
    query = request.GET.get("q")
7
    if query:
8
        albums = albums_search.filter(
9
            Q(request_user__icontains=query) |
10
            Q(request_type__icontains=query) 
11
        ).distinct()
12
13
        return render(request, 'request_review.html', {
14
            'albums': albums,
15
            'form': form
16
        })
17
    else:
18
        return render(request, 'request_review.html', {
19
            'albums': albums,
20
            'form': form
21
        })

Nur wie bekomme ich das zusammen hin, dass mann das über den Slider 
nutzen kann?

die html dazu:
1
<div class="albums-container container-fluid">
2
   <!-- Albums -->
3
   <div class="row">
4
      {% if albums %}
5
      {% for album in albums %}
6
7
      <div class="col-sm-4 col-lg-3">
8
         <div class="review">
9
            <div class="review-body">
10
               <table width="100%">
11
                  <tbody>
12
                     <tr>
13
                        <td class="alnleft">
14
                         {{album.id}}</td>
15
                        <td class="alnright">
16
                        </td>
17
                     </tr>
18
                  </tbody>
19
               </table>         
20
                <br>
21
               <p class="alnsmall">{{album.request_user}}</p>
22
               <p class="alnsmall">{{album.request_date|date:"Y-m-d H:i"}}</p>
23
            </div>
24
         </div>
25
         <br>
26
      </div>
27
      {% endfor %}
28
      {% else %}
29
      {% endif %}
30
   </div>
31
</div>
32
</div>

P.S.: es stehen noch ein paar Daten mehr mit in im Template, habe das 
gekürzt, dass es nicht zu lang wird.

von Seba (Gast)


Lesenswert?

Ein bischen bin ich weiter gekommen...

Ich habe im Template den Toggle Slider eingebaut und über ein script 
öffne ich eine URL Erweiterung.
1
<label class="switch">
2
     <input type="checkbox">
3
4
  <span class="slider round" ></span>
5
</label>
6
7
<script>
8
   $('input[type=checkbox]').change( function() {
9
   if($(this).prop("checked") == true){
10
       window.open("/?favorite=On","_self")
11
}else{
12
    window.open("/?favorite=Off","_self")
13
     ;
14
   }
15
});
16
17
</script>


Soweit geht das so halbwegs.

Jetzt allerdings ein neues Problem. Wenn der Toggle Slider angeklickt 
wurde, dann ist zwar der Filter richtig gesetzt und im Template wird das 
angezeigt was es auch sol, aber der Slider ist wieder auf dem 
unangeklicket Ausgangspunkt.

Gibt es eine Möglichkeit das ich den Filter hierüber wieder deaktivieren 
kann?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.