2011-02-10 3 views
0

移行ツールを使用せずにデータベーステーブルを更新しようとしているdjangoプロジェクトがあります。私は単純にその名前を参照するモデルに「スラッグ」フィールドを追加していますが、私は既にスラッグを持っている別のテーブルにあるものを複製することを考えていました。名前フィールドに結び付けられたデータベースにスラッグフィールドを作成する

ので、

+----------+--------------+------+-----+---------+----------------+ 
| Field | Type   | Null | Key | Default | Extra   | 
+----------+--------------+------+-----+---------+----------------+ 
| id  | int(11)  | NO | PRI | NULL | auto_increment | 
| gym_name | varchar(50) | NO | UNI | NULL |    | 
| gym_slug | varchar(50) | NO | MUL | NULL |    | 
| created | datetime  | NO |  | NULL |    | 
| modified | datetime  | NO |  | NULL |    | 
+----------+--------------+------+-----+---------+----------------+ 

を次のように私は、データベース内の既存のテーブル「ジム」を持っているし、次のように私は、データベース内の別のテーブル「壁」を持っている:

+-----------+-------------+------+-----+---------+----------------+ 
| Field  | Type  | Null | Key | Default | Extra   | 
+-----------+-------------+------+-----+---------+----------------+ 
| id  | int(11)  | NO | PRI | NULL | auto_increment | 
| wall_name | varchar(50) | NO | UNI | NULL |    | 
| gym_id | int(11)  | NO | MUL | NULL |    | 
| created | datetime | NO |  | NULL |    | 
| modified | datetime | NO |  | NULL |    | 
+-----------+-------------+------+-----+---------+----------------+ 

これはなるだろう私が道の一部:

ALTER TABLE wall ADD COLUMN wall_slug varchar(50); 

しかし、私はどこにある外部キーを把握する方法かどうか分かりません最初のテーブルは参照しているので、新しいテーブルを指す必要があります。

最終目標:wall_slugフィールドは、一意のwall_nameフィールドに関連付けられています。希望は意味をなさない。

+0

「最初のテーブルの外部キーが参照する場所を特定する方法がわからないため、新しいキーを指す必要があります。」あなたは外部フィールドではなく、テキストフィールドを追加していますよね?また、 "ALTER TABLE wall ADD COLUMN wall_slug varchar(50)"を意味しますか? – Rob

+0

後者の質問に関しては、はい - 適切なクエリを反映するように編集しました。あなたの最初の質問については、テーブルが私に見せているものを誤解しているかもしれませんが、gym.gym_nameとgym.gym_slugはモデルレベルだけでなくDBレベルでも関連しているようです。私は何とかwall.wall_slugにwall.wall_nameを関連付けるために同じことをしなければならないと仮定していますが、どうすればよいか分かりません。 – IanWhalen

答えて

0
from django.template.defaultfilters import slugify 

class Wall(Model): 
    name = CharField(max_length=60) 
    slug = CharField(max_length=60, unique=True) 
    ... 

    def save(self, *args, **kwargs): 
     if self.slug == '': 
      self.slug = slugify(self.name) 
     super(Wall, self).save(*args, **kwargs) 

保存するときに名前に基づいてスラッグが生成されます。また、次回に名前を変更するときにスラッグを変更することから保護されるため、URLは安定したままで変更されません。

+0

1質問:SlugFieldの代わりにSlugをCharFieldに変更した理由はありますか?そして1点:私はDBについてのように、ジャンゴモデルについて心配していませんでした。私の主な関心事は、syncdbで作成されたジムテーブルはキーのMUL値を持っているように見え、ウォールテーブルで正しく再作成する方法がわかりません。 – IanWhalen

関連する問題