Pierwszym klubem Lafaty w karierze był amatorski klub o nazwie JZD Olešník. Po występach w zespole juniorów w 1992 zawodnik odszedł z zespołu i podjął treningi w szkółce piłkarskiej SK České Budějovice.
Czeskie Budziejowice
W 1999 tuż przed ukończeniem 18. roku życia awansował do kadry pierwszej drużyny i w sezonie 1999/2000 1 sierpnia 1999 zadebiutował w rozgrywkach pierwszej ligi czeskiej w meczu z Drnovice (2:0)[4]. W pierwszych dwóch sezonach był rezerwowym, a w 2001 spadł z zespołem do drugiej ligi. Na zapleczu pierwszej ligi David grał przez rok – najpierw w barwach Českich Budějovic, a następnie przez rundę wiosenną w drużynie FC Vysočina Igława, w barwach której zagrał 5 meczów, w których zanotował jedno trafienie[5].
Latem 2002 wrócił z wypożyczenia do Vysočiny. 26 sierpnia 2002 strzelił dwie debiutanckie bramki dla klubu w wygranym 2:1 meczu przeciwko Baník Ostrawa[4]. Przez kolejne dwa sezony był najlepszym strzelcem drużyny z Budziejowic, strzelając 8 goli w sezonie 2002/2003 i 14 goli w sezonie 2003/2004. 8 maja 2004 w meczu z Viktorią Pilzno (4:2) skompletował swojego pierwszego hat-tricka w karierze[6]. W sezonie 2004/2005 zespół Czeskich Budziejowic zajął 15. miejsce w ligowej tabeli, znowu zostając zdegradowany do czeskiej drugiej ligi. Jest trzecim najlepszym strzelcem w historii klubu w rozgrywkach pierwszoligowych z 27 golami[7].
Skoda Ksanti
Latem 2005 Lafata trafił do Grecji, zostając zawodnikiem Skody Ksanti, z którą podpisał pięcioletnią umowę[8]. W lidze greckiej zadebiutował 11 września w zremisowanym 1:1 wyjazdowym meczu z OFI 1925[9]. W Skodzie spędził tylko pół roku, rozgrywając 9 meczów, w których nie zdobył bramki.
Jablonec
W styczniu 2006 został pozyskany przez FK Jablonec 97[10], w którym przez rok zdobył 10 goli w 31 ligowych meczach.
30 lipca 2008 Lafata powrócił do zespołu z Jablonca, podpisując trzyletni kontrakt; miał także ofertę z Czeskich Budziejowiec[15][16]. W pierwszym sezonie zdobył 10 bramek w lidze, a Jablonec zajął 5. miejsce w tabeli ligowej[17]. W sezonie 2009/2010 został wicekrólem strzelców czeskiej ekstraklasy z 11 golami, za Michalem Ordošem, który zdobył 12 goli[18]. Rozgrywki pucharowe zakończył z 5 meczami, w których strzelił 7 bramek i został królem strzelców Pucharu Czech. W meczu finałowym, rozegranym 18 maja 2010, zdobył gola, ale jego drużyna przegrała 2:1 z Viktorią Pilzno[19]. W kolejnym sezonie Lafata po raz pierwszy zdobył koronę króla strzelców, strzelając 19 goli w 29 spotkaniach[20]. 26 listopada 2011 w zremisowanym 2:2 meczu ze Slovanem Liberec strzelił swoją 100. bramkę w pierwszoligowych rozgrywkach[21], za co dostał później pamiątkową tablicę z odlewem własnych stóp[22]. W sezonie 2011/2012 strzelił 25 goli i pobił ligowy rekord Radka Druláka z sezonu 1995/1996 i Vratislava Lokvenca z sezonu 1999/2000, którzy dzierżyli rekord największej liczby goli w pojedynczym sezonie ligowym (licząc od 1993), zdobywając 22 bramki[23][24]. W roku kalendarzowym 2011 pięciokrotnie kompletował hat-tricka w lidze, z czego 3 zdobył w rundzie wiosennej sezonu 2010/2011, a 2 dołożył w rundzie jesiennej następnego sezonu[25]. Mając na koncie 88 trafień w barwach Jablonca w najwyższej klasie rozgrywkowej Czech jest rekordzistą klubu w klasyfikacji strzelców[26]. Łącznie w Jabloncu zagrał w 186 meczach, w których zdobył 106 goli.
Sparta Praga
W styczniu 2013, będąc na półmetku rozgrywek liderem klasyfikacji najskuteczniejszych zawodników (13 goli), przeszedł za około 750 000 euro do Sparty Praga, z którą podpisał 3,5–letni kontrakt[27]. W sezonie 2012/2013 został po raz trzeci z rzędu najlepszym strzelcem ligi (20 goli), powiększając do 122 goli swój ogólny dorobek w czeskiej ekstraklasie[28].
W lipcu 2013 został wyznaczony przez trenera, Vítězslava Lavičkę, na kapitana zespołu w miejsce Marka Matějovskiego[29]. 31 marca 2014 w meczu ze Znojmem (3:0) strzelił gola[30], dzięki któremu został najlepszym strzelcem czeskiej ligi w historii, zdobywając 134. gola i wyprzedzając dotychczasowego lidera – Horsta Siegla[31]. Zdobywając 16 goli w lidze, Lafata został wicekrólem strzelców, kończąc rozgrywki za Josefem Hušbauerem (18 goli)[32]. Razem ze Spartą zdobył w sezonie 2013/2014mistrzostwo Czech, a także Puchar Czech, wygrywając mecz finałowy przeciwko Viktorii Pilzno po serii rzutów karnych, w których skutecznie wykonał swoją „jedenastkę”[33].
15 lipca 2014 w meczu kwalifikacji do Ligi Mistrzów UEFA przeciwko Tallinnie Levadii (7:0) strzelił pięć goli[34]. Swoją dobrą formę potwierdził hat-trickiem w wygranym 4:2 meczu z Malmö[35]. Sezon ligowy 2014/2015 zakończył z 20 trafieniami[36], a łącznie w sezonie zdobył 34 gole, rozgrywając 44 spotkania.
14 maja 2016 w meczu przeciwko Vysočinie jako pierwszy zawodnik w historii ligi zdobył 5 goli w jednym spotkaniu[37]. W sezonie 2015/2016 został po raz piąty w karierze królem strzelców czeskiej ekstraklasy, czym pobił osiągnięcie Horsta Siegla[38]. 30 października 2016 zanotował hat tricka w meczu przeciwko Viagem Příbram, awansując na 3. miejsce w klasyfikacji najskuteczniejszych strzelców w historii mistrzostw Czech, za Josefem Bicanem (447 goli) oraz Vlastimilem Kopeckým (252 gole)[39]. W sezonie 2016/2017 ponowie został (wraz z Milanem Škodą ze Slavii Praga) najlepszym strzelcem ligi z 15 bramkami[40].
19 sierpnia 2017 strzelił gola w meczu z Slovácko, który był jego 400. występem w czeskiej ligi[41]. 26 maja 2018 po meczu Bohemians Praha 1905 – Sparta Praga ogłosił zakończenie piłkarskiej kariery[3]. Pomimo zakończenia profesjonalnej kariery, Lafata występuje w regionalnym zespole JZD Olešník[42][43].
Kariera reprezentacyjna
W seniorskiej reprezentacji Czech Lafata zadebiutował 2 września 2006 w wygranym 2:1 spotkaniu z Walią, rozegranym w ramach eliminacji do Euro 2008. W 75. minucie meczu zmienił Jiříego Štajnera, a minutę później zdobył gola. W 89. minucie spotkania ustalił wynik meczu na 2:1 dla Czech[44]. Nie znalazł jednak uznania w oczach selekcjonera Karela Brücknera i nie znalazł się w 23–osobowej kadrze na sam turniej mistrzostw Europy[45].
26 maja 2012, po sześciu latach przerwy, strzelił swoją kolejną bramkę dla czeskiej reprezentacji, trafiając w meczu towarzyskim z reprezentacją Izraela (2:1)[46]. Trzy dni później został powołany przez Michala Bíleka na Mistrzostwa Europy 2012[47], podczas których zagrał w jednym meczu – w fazie grupowej przeciwko Rosji (1:4)[48].
22 czerwca 2016, po nieudanych Mistrzostwach Europy 2016 postanowił zakończyć karierę reprezentacyjną[49]. Dla drużyny narodowej rozegrał 41 meczów, w których 9 bramek.