Feedjack 読み (5)
ええと、今は fjlib.get_posts_tags 手続きの中。
昨晩ヒリ出した以下の SQL が正しいという前提で中を見てみると
select feedjack_tag.*, feedjack_post_tags.post_id from feedjack_tag, feedjack_post_tags where feedjack_tag.id = feedjack_post_tags.tag_id and feedjack_post_tags.post_id IN (... object_list の post.id のリスト);
ちなみに上記のクエリセットは tags という変数に格納されている。うーん。ちょっとモデルというか schema なソレをきちんと確認したほうが良さげな気がしてきました。でないと直下の
for tag in tags: if tag.post_id not in tagd: tagd[tag.post_id] = [] tagd[tag.post_id].append(tag) if tag_name and tag.name == tag_name: tag_obj = tag
な処理がいったい何なのかが微妙スギ。
models.py の整理
定義されているのは以下
- Link
- Site
- Feed
- Tag
- Post
- Subscriber
意味がまだ分かってません(滝汗
特に Feed と Post の差が微妙。とりあえず結合している根拠のみ、上から順に。
まず、Site は
class Site(models.Model): # snip links = models.ManyToManyField(Link, verbose_name=_('links'), filter_interface=models.VERTICAL, \ null=True, blank=True) # snip
ってなっていて、Link と多対多の関係になっている、はず。この場合、links はクエリセットなリストとかになるのでしょうか。資料を見るに追加は add 使ってね、とあるんですが抽象度高すぎで具体的に何か、が見えない。とりあえずスルー。
次は Post か
class Post(models.Model): feed = models.ForeignKey(Feed, verbose_name=_('feed'), null=False, blank=False) # snip tags = models.ManyToManyField(Tag, verbose_name=_('tags'), filter_interface=models.VERTICAL) #snip
Post と Feed は n:1 か。あるいは Post と Tag も多対多。とりあえず属性についてもここではスルーで。
次は Subscriber ですが以下
class Subscriber(models.Model): site = models.ForeignKey(Site, verbose_name=_('site') ) feed = models.ForeignKey(Feed, verbose_name=_('feed') ) # snip
ええと、データベース API リファレンスのリレーションの項によると上記については
- Subscriber と Site は n:1 の関係
- Subscriber と Feed は n:1 の関係
ということになるのか。subscriber って何だろ、と思って辞書引いてみたら_購読者_とある。購読者は Site と Feed を一つ選択できます、という事なのでしょうか。Feed って何にあたるのかなぁ。
微妙ですが、整理してみると
1 n n 1 Site --- Subscriber --- Feed n 1 | | | | | | n n n n Link Post --- Tag
なカンジ? # マンガ無茶苦茶分かりにくい
イメージとしては Site に対していくつかの Feed がぶら下がってて云々というのはなんとなく分かるんですが、Link って一体何でしょうか。(とりあえずスルー
ぢつは
今在籍している職場は日報が社内ブログでして、これを上手に拾うソレを作ってやれ、と考えておるのですが上記の schema なソレであれば個人用の feed を Subscriber に登録しておくことで
- 全員の feed をまとめて見れる Site
- チームごとにまとめた Site (複数)
な事は可能か。あるいは役立ち feed みたいなのを追加して項目ごとで管理、なんてゆーこともできそげ。あとは feed (というか Subscriber ??) を簡単に追加できる i/f があれば嬉しい。
と言いつつ
コントローラの流れを追いかけてみたら処理のイメージが楽。fjlib.getcurrentsite とかさくさく読めたぞ。わはははは。
でも、Site の url 属性にアドレス入れとけば自由に Site が作れて URL のマップも楽ぢゃん、って一瞬思ったのですが、
urls.py とは整合しない気がしてきました。むむ。
(r'^$', views.mainview),
以外だと user/なんたら、とか tag/なんたら、な URL でないと views.mainview に行けません。もしかして virtual host なソレで切り分けれ、なのかなぁ。面倒くさいなぁ。でも apache2 だからそうでもないといえばそうでもないか。
でも自宅マシンで試験するのは相当至難のワザです。
# dns 立てれば良いのでしょうが ...