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 立てれば良いのでしょうが ...