VS Code vs. Django, AI dev

38 views
Skip to first unread message

Vladimír Macek

unread,
May 14, 2025, 7:45:16 AMMay 14
to djan...@googlegroups.com

Ahoj,

v této konferenci už moc velký provoz není, ale přesto se zkusím zeptat.

1.

Nedávno jsem z osobních důvodů přešel z PyCharmu na VS Code a spousta věcí se mi na tom líbila. Na Django projektech však hodně používám typovou kontrolu a přizpůsobuju tomu i zdrojáky.

Snažím se potlačovat co nejmíň warningů. Nainstaloval jsem vedle Pylint i Pylance extension, aby mě prudil. Umí toho hodně a dobře, ale...

  • Django má některé magické vlastnosti, jako že přidá k modelům id typu AutoField. Statická kontrola kódu pak křičí, že .id atribut neexistuje.

  • Nebo neví, že atribut instance z IntergerFieldu je typu int.

  • Nebo křičí, že neexistuje metoda modelu get_<field>_display(), když mám choice-type field a Django tuto metodu dynamicky přidá.

  • QuerySety jsou samostatná kapitola. :-)

Máte nějak funkčně ošéfováno, že váš VSCode nekřičí a dokonce chápe tyto a další Django-specific prvky vč. jejich typů?

Čtu, že to má snad řešit django-stubs v souběhu s konfigurací v pyproject.toml. To mám, ale buď mi to nefunguje (a ani nekřičí) nebo tyto věci neumí...

Povedlo se to někomu z vás tak, že jste spokojeni?

2.

Co používáte ve VS Code na AI-assisted vývoj? LLM autocomplete je super. Ke kterému extension jste dokonvergovali, jaký podkladový LLM používate a je placený?

Z těch co jsem zkusil u mě vydržel Supermaven, ale používám z něj málo a vývoj je jistě dál. Tak uvítám tip.

--
Děkuji. S pozdravem
Vladimír Macek | +420 608 978 164

Honza Javorek

unread,
May 14, 2025, 7:49:35 AMMay 14
to djan...@googlegroups.com
Ahoj,

v nějakém tom základním Python doplňku pro VS Code přímo od MS je zabudovaný (taky jejich) pyright, který hlídá typy. Ani pylance, ani pylint jsem neinstaloval, na lintování a přeformátování kódu používám kdyžtak ruff. Jestli si to rozumí s Djangem ale vůbec nevím, protože Django nedělám :D

Jinak mám GitHub Copilot přímo, ale že by to byla nějaká bomba, nevím. Lidi si chválí Cursor, což je fork VS Code s agentním modelem, takže může i vytvářet soubory atd., ale byl jsem líný to zatím zkoušet. Trochu doufám, že to MS dožene a udělá to pro GitHub Copilot taky, takže nebudu muset nic měnit, zkoušet, a budu pořád dál platit jen tu jednu věc.

HJ

--
--
E-mailová skupina djan...@googlegroups.com
Správa: http://groups.google.cz/group/django-cs
---
Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny „django-cs“ ve Skupinách Google.
Chcete-li zrušit odběr skupiny a přestat dostávat e‑maily ze skupiny, zašlete e-mail na adresu django-cs+...@googlegroups.com.
Tuto diskuzi najdete na adrese https://groups.google.com/d/msgid/django-cs/ea2173d0-6b73-6f04-1011-805517c73858%40sandbox.cz.

Beda Kosata

unread,
May 14, 2025, 7:55:06 AMMay 14
to djan...@googlegroups.com
Ahoj,

On Wed, May 14, 2025 at 1:45 PM Vladimír Macek <ma...@sandbox.cz> wrote:

2.

Co používáte ve VS Code na AI-assisted vývoj? LLM autocomplete je super. Ke kterému extension jste dokonvergovali, jaký podkladový LLM používate a je placený?

Z těch co jsem zkusil u mě vydržel Supermaven, ale používám z něj málo a vývoj je jistě dál. Tak uvítám tip.


Já jsem nedávno vyzkoušel Cursor (https://www.cursor.com) a byl to pro mě důvod po mnoha letech opustit PyCharm 😢. Cursor je postavený na VS Code, takže tam člověk používá i jeho pluginy, atp.
Po pravdě řečeno, přechod na Cursor/VS Code byl (a zůstává) trochu bolestivý - PyCharm má hodně věcí propracovanějších. Ale způsob, jak pomáhá s kódem je o level jinde než PyCharm + Copilot a nebo vestavěný PyCharmový AI, takže jsem si vyhodnotil, že mi to za to stojí. Cursor má totiž daleko lepší přehled o tom, co se zrovna děje (i mezi soubory, atp.), a kromě nového kódu nabízí i úpravy existujícího. Rozhodně doporučuju vyzkoušet, špatně se ten wow efekt popisuje :)
 
Béda

--
Děkuji. S pozdravem
Vladimír Macek | +420 608 978 164

Radim Novotny

unread,
May 14, 2025, 8:16:27 AMMay 14
to djan...@googlegroups.com
Ahoj, 

VSCode s Django používám už dlouho, neřeším ale 100% type checking, protože s Djangem to je komplikovanější. Nevím o ničem jiném, než django-stubs, ale nepoužívím to. Jsem rád za to, že mi ukáže nedefinovanou proměnnou nebo špatně ukončený string :) 

Kolega se o to chvilku snažil, ale je to fakt dost komplikované a otravné. Jednodušší příklad:

class MarkItem(models.Model):
    MarkItemId = NewType('MarkItemId', int)
    id: MarkItemId
    pk: MarkItemId
    score_set: 'models.Manager[Score]'

Pustil se i do složitějších struktur, ale je to neudržovatelné. To by chtělo jednoho extra člověka jen na to, ale ten by z toho za chíáli asi zblbnul.
Já se snažím definovat alespoň základní typy proměnných nebo parametrů, nebo typ návratové hodnoty.

Co se týká AI, tak ve VSCode používám občas chat s Claude 3.7 Sonet modelem a nebo ChatGPT o1. Určitě to pomáhá, i v Django, ale je potřeba ho pořád kontrolovat. Občas je to super, že člověk jen mačká Tab a ono to píše přesně to co bych potřeboval :)  Na druhou stranu, občas je ai-autocomplete otravné, až nebezpečné, když zapisuju nějaká čísla a on mi tam háže nějaké náhodné návrhy :)
Modely nemám ale porovnané, nedokážu říct, který je lepší nebo horší.

Radim

starenka .

unread,
May 16, 2025, 3:00:34 AMMay 16
to djan...@googlegroups.com

ja budu nekonstruktivni: je mi soufl z toho, jak lidi utekli z javy a .net k pythonu a ted se ho snazi aktivne zk***it temahle obludariama. pulku definici fuknci uz nejsem schopnej ani rozlustit, protoze je to union union union blah. soubory maj tisice radku jen kvuli temhle onucim, ktery stejne k nicemu nejsou, protoze lidi nepouzivaj mypy. jestli to takle pujde dal, zacnu se po 20 letech poohlizet po novym jazyce.


Jirka Vejrazka

unread,
May 16, 2025, 5:14:59 AMMay 16
to djan...@googlegroups.com
Jojo, tuhle jsem koukal na nejakou dokumentaci k nejakemu balicku a rikal jsem si "tohle vypada presne jako Java, 70% popisu argumentu je vizualni omacka, kterou musim preskocit"). Ja chapu, ze to par procent lidi nekde vyuzije, ale z Pythonu, ktery se driv cetl skoro jako anglictina, se stava nesrozumitelny gulas :(

Honza Javorek

unread,
May 16, 2025, 6:46:52 AMMay 16
to djan...@googlegroups.com
Mě se nejvíc líbí, jak s tím jde natypovat data, třeba pomocí pydantic, a hlídá mi to pak, jestli tam mám to, co čekám, že tam mám. Jinak je mi to spíš fuk a takové ty akrobacie taky nemám rád. Občas jsem je přidal, aby mi editor napovídal složitější objekty skrz nějaký dekorátor, ale byl to strašný oser a kdyby mi s tím nepomohl Copilot, tak to ani nevytvořím. Připadal jsem si jak v Haskellu, hlavně ty chybové hlášky, co z toho padaly když to bylo blbě, mi nikdy nic neřekly a byly super zamotaný.

Trochu pomáhá, když se ty věci pojmenujou. Takže tam pak není company: dict[str, dict[list[int]] | tuple | str | int] apod. (to jsem si teď vymyslel), ale udělá se někde bokem Company = dict[str, dict[list[int]] | tuple | str | int] a pak se dá napsat company: Company a ještě se to dá použít na víc místech. Tohle pak hodně zpřehledňuje to čtení kódu. Ale kdo to dělá, že?

Asi je to jak se vším. Je to jenom nástroj, do kterýho se můžu zamotat a nasolit to bezhlavě všude, nebo si s ním občas nějak pomoct. Blbý samozřejmě je, když to neovlivním a musím číst kód v nějaké knihovně, kde to je všude a je to dlouhý a nepřehledný.

HJ

Jaroslav Beran

unread,
May 16, 2025, 9:12:07 AMMay 16
to djan...@googlegroups.com
Nepovinná možnost používání typování v Pythonu není vůbec špatná věc. V jedno-souborových skriptech nebo malých projektech zřejmě není potřeba typovat, ale pokud je projekt dostatečně velký a spolupracuje na něm více lidí tak už je to nezbytnost. Nástorje jakom MyPy pak dokážou odhalit zákeřné chyby, které by se v silně typovaných jazycích neděly.

Já vidím nepovinné typování jako velkou výhodu a flexibilitu Pythonu. Můžu v něm psát jednoduché věci jednoduše a složité projekty dostatečně robusně.


pá 16. 5. 2025 v 12:46 odesílatel Honza Javorek <ma...@honzajavorek.cz> napsal:


--
Jaroslav Beran
pgp: A6EA 1F93 EF6B D8D1 35AD  B6D7 1E79 73E5 1B28 17F9

Vítek Pliska

unread,
May 16, 2025, 9:12:07 AMMay 16
to djan...@googlegroups.com
Ahoj,

Ad 2.

Používám Cursor a Zed. A Aider a latentně Claude Code když chci zkoušet nějaké komplexnější věci na základě rozsáhlejších SPEC promptů. S jejich přípravou jsem zatím trochu na štíru stejně tak jako s precizností systémových promptů/rules.

Ad 1.

Pylance, Pyright zvládne vše. Potřebuješ ale asi k Djangu nainstalovat Django-stubs, správně to nakonfigurovat a pak záleží jaký level kontrol si nastavíš - basic, strict... (Pylance je pyright, nastavujeme třeba v pyproject.toml)

A podle toho píšeš kód. Pokud chceš aby ti Editor/IDE našeptávalo vše správně tak je třeba mít bohatší kód (modely), typovat např příchozí FK…

Může to vypadat třeba takto:

Základ v modelu (všimni definice těch fieldů):

    objects: ClassVar[ProductManager] = ProductManager()

    avis_rowguid = models.UUIDField[UUID | None, UUID | None]("AVIS UUID", null=True, unique=True)
    avis_timestamp = models.PositiveIntegerField[int, int](default=0, db_index=True)
    avis_translation_timestamp = models.PositiveIntegerField[int, int](default=0, db_index=True)
 
Další věci co v modelu uvedeš např pokud máš vlastní QuerySet...

    # Obtained via Manager annotations
    current_price: Optional[Decimal] = None
    current_retail_price: Optional[Decimal] = None
    ...  

    # Incoming foreign keys:
    availability: models.Manager["Availability"]
    incategory: "InCategoryManager"
    inorder: "InOrderManager"

Takže, ukecanější ale pak když to používáš jinde v kódu máš pohodu :)  


Reply all
Reply to author
Forward
0 new messages