[Django] Suche markieren?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
csc
User
Beiträge: 23
Registriert: Montag 15. Juni 2009, 11:22

Grüß euch,
Ich habe Django offen und suche etwas im Suchfeld von Personen oder so. Gebe "Peter" oben ein und er gibt mir alle Peters aus der Datenbank aus. Jetzt könnte Peter ja auch in der Spalte "2. Name" sein oder in der Firma "Peter" sein und in der Email vorkommen oder so aber ich will ja nur die wirklichen "Peters" haben. Fällt mir auf dem ersten blick nicht wirklich auf darum wollt ich fragen ob ich die Suche im Suchfeld in der Anzeige unten alla Googlesuche markieren kann? So dass Peter dann in der suche ersichtlich als "Peter" markiert ist? Weil dann fällt mir natürlich sofort auf dass mitten in der Email Peter oder im 2. Namenfeld Peter steht...

Gruß Chris
programmersbook
User
Beiträge: 1
Registriert: Freitag 11. Dezember 2009, 16:08

Hi!

Da würde ich nach "Peter" suchen und mit "<b>Peter</b>" ersetzen.

Keep it simple!
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

programmersbook hat geschrieben: Da würde ich nach "Peter" suchen und mit "<b>Peter</b>" ersetzen.
Besser mit <strong> :-)
csc hat geschrieben: ...aber ich will ja nur die wirklichen "Peters" haben
Was ist denn ein wirklicher Peter? Wodurch zeichnet er sich auf Datenebene aus?

Ich kenne mich mit Django nicht wirklich aus, daher die Frage: Geht es vom Plain-Text Suche oder suchst Du gezielt nach dem Wert eines Attributes?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Hyperion hat geschrieben:
csc hat geschrieben: ...aber ich will ja nur die wirklichen "Peters" haben
Was ist denn ein wirklicher Peter? Wodurch zeichnet er sich auf Datenebene aus?
Ich nehme an ein wirklicher Peter ist einer, dessen Vorname-Attribut "Peter" lautet. Ist halt noch die Frage ob Vornamen wie "Hans-Peter" oder "Salpeter" immer noch als wirklicher Peter gelten.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
csc
User
Beiträge: 23
Registriert: Montag 15. Juni 2009, 11:22

Mir reicht es erst mal, wenn die Suche dann unten in der Anzeigetabelle markiert ist. Aber mit einem einfachen <b></b> ist es da nicht getan denke ich.
Wie er das in Django sucht ist mir auch was fraglich... Aber theoretisch durchsucht er die Datenbank... aber kanns nicht wirklich sagen.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

csc hat geschrieben:Mir reicht es erst mal, wenn die Suche dann unten in der Anzeigetabelle markiert ist.
Welche Anzeigetabelle?
csc hat geschrieben:Wie er das in Django sucht ist mir auch was fraglich... Aber theoretisch durchsucht er die Datenbank... aber kanns nicht wirklich sagen.
Wer ist 'er'?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:


GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
csc
User
Beiträge: 23
Registriert: Montag 15. Juni 2009, 11:22

@Leonidas:

Code: Alles auswählen

class Person(models.Model):
    company =models.ForeignKey(Company,null=True,blank=True,verbose_name='Firma')
    position = models.ForeignKey(Position,null=True,blank=True)
    salut = models.ForeignKey(Salutation,verbose_name='Anrede')
    adviser = models.ForeignKey(Adviser,null=True,blank=True,verbose_name='Betreuer')
    titel = models.ForeignKey(Title,verbose_name='Titel',null=True,blank=True)
    birth = models.CharField('Geburtstag',max_length=20,null=True,blank=True,help_text="Bitte halten sie folgene Formatierung ein: <em>DD.MM.YYYY</em>.")
    fname = models.CharField('Vorname',max_length=100)
    sname = models.CharField('Nachname',max_length=100)
    comment = models.CharField('Kommentar',null=True,blank=True,max_length=40)
    subkey = models.ManyToManyField(SubTag,blank=True,null=True,verbose_name='Stichwort')
.
.
.   
Wenn ich davon ein Objekt dann in Django erstelle sind wir uns doch einig, dass mir die erstellte / noch mehr erstellten Personen angezeigt werden oder? Das ist meine "Anzeigetabelle" Da hab ich nen Suchfeld drüber gapappt und wenn ich suche filtert er 1A alles raus aber er durchsucht halt jede Spalte da nach dem Begriff... Den wollte ich dann nach der Suche in der Ansicht einfach Fett oder Kursiv angezeigt haben wollen.

"Er" ist einfach mein Django Projekt ^^ Ich finde wenn man etwas personifiziert kann man sich besser über "Ihn" aufregen ;-)

@jens: Hmm... Ich verstehs noch nicht ganz was da passiert aber ich glaube das ist nicht ganz das, was mir weiterhilft.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Auch wenn ich mich nicht in Django auskenne: Man wird doch auch in Django gezielte DB-Abfragen realisieren können, oder nicht? Also frage die DB doch einfach nur nach dem Feld "sname" und schon hast Du genau die, die Du wolltest!?!
csc
User
Beiträge: 23
Registriert: Montag 15. Juni 2009, 11:22

Ja aber die Suche oben ist ja ne allgemeine Suche. Weil kaum will ich mal nicht "sname" durchsuchen hab ich ja dann wieder ein Problem oder 8 Suchleisten oder so ^^
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dann bau doch davor eine Auswahlbox, nach welchem Feld Du suchen möchtest!
csc
User
Beiträge: 23
Registriert: Montag 15. Juni 2009, 11:22

Ne, das wir dann zu groß! Ich habe da

Code: Alles auswählen

 search_fields = ['sname','bla','bla1',...]
in meiner Admin.py und da jetzt rum zu basteln, dass es dann schön aussieht und nicht zu viel Platz weg nimmt im View (im mom ist es eine einfache kleine Suchbox) finde ich dann überflüssig. Kann ja in meiner Ansicht einfach auf die Spalte "SNAME" klicken und dann sortiert er mir die Ansicht nach dem neu Laden der Seite. Wollte nur ne kleine grafische Hilfestellung haben oder so. Dachte, dass search_field vll sowas tolles schon hat oder es einfach ist hinzu zu fügen.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ich verstehe Dein Problem immer noch nicht ganz... wenn Du nach einem Attribut suchen möchtest, dann muss Deine App ja auch wissen, nach welchem. Zaubern kann Django ja auch nicht...
csc
User
Beiträge: 23
Registriert: Montag 15. Juni 2009, 11:22

Alles was in meinem "search_field" drin steht wird dann gesucht. Wenn ich ein Search_field mache wo nur ['sname'] drin steht kann er nur sname durchsuchen. Wenn ich da aber noch so wie ich ne multisuche mache und 3-4 andere Felder hinzufüge wie ['sname','fname','spitzname','Familienname'] dann sucht was ich eingebe in allen 4 Feldern. Wenn ich dann in dem Ergebnis was ich bekomme das gesuchte wort wenigstens markiert hätte oder so wäre ich schon glücklich. Aber er zeigt mir alle Ergebnisse aus SNAME FNAME SPITZNAME und FAMILIENNAME an ohne zu markieren, wo er genau der Wort gefunden hat.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

csc hat geschrieben:Aber er zeigt mir alle Ergebnisse aus SNAME FNAME SPITZNAME und FAMILIENNAME an ohne zu markieren, wo er genau der Wort gefunden hat.
Und genau das Problem hättest Du ja nicht, wenn Du nur nach einem Attribut suchen würdest und der Suchende das vorher festlegt.
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

csc hat geschrieben:Aber er zeigt mir alle Ergebnisse aus SNAME FNAME SPITZNAME und FAMILIENNAME an ohne zu markieren, wo er genau der Wort gefunden hat.
So ungefähr habe ich dein Problem jetzt verstanden obwohl ich immer noch schwer auseinander halten kann was "er" macht und was dein eigener Code ist. Du lässt anscheinend im Endeffekt auf SQL-Ebene so etwas generieren wie

Code: Alles auswählen

SELECT * From tabelle
  WHERE
    feld1 = 'wert' OR
    feld2 = 'wert' OR
    feld3 = 'wert'
Wenn du so ein Statement hast dann bekommst du eine Ergebnisliste, aber keine Details darüber in welchem Feld etwas gefunden wurde. Auf SQL-Ebene würden mir da Möglichkeiten einfallen das zu ändern, aber ich glaube nicht, dass das von Django aus über den ORM geht.

Du könntest aber natürlich Einzelsuchen auf die betroffenen Felder absetzen.
csc
User
Beiträge: 23
Registriert: Montag 15. Juni 2009, 11:22

Ja, so arbeitet das "search_field" in django. Jedes weitere Attribut was ich search_field übergebe ist ein weiteres OR in der SQL suche.
Vorher sagen was genau er suchen soll geht schwer und sieht dann einfach nicht gut aus für den Benutzer. Wollte die kleine Searchbox auf der Seite jetzt nicht unnötig groß machen oder mit radiobuttons für eine spezielle Auswahlsuche versehen!
Nur den Wert aus den Tabellen den ich bekomme was hervorheben.
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

csc hat geschrieben:Nur den Wert aus den Tabellen den ich bekomme was hervorheben.
Unter "hervorheben" verstehe ich jetzt mal die Darstellung in HTML.

Wenn es jetzt nur darum geht, den Suchbegriff in der Ausgabe anders darzustellen dann lauf doch einfach über die auszugebenden Daten und ersetze vor der Ausgabe dein Suchwort 'value' mit '<strong>value</strong>' - oder optimalerweise mit '<span class="searchvalue">value</span> wobei die Klasse searchvalue dann im CSS passend deklariert ist.
Antworten