マイmodels.pyに動作しない:ユーザーが削除した場合ジャンゴ1.7とPSQL:on_delete = models.SET_NULL
class MyFile(models.Model):
file = models.FileField(upload_to="myfiles", max_length=500, storage=OverwriteStorage())
slug = models.SlugField(max_length=500, blank=True)
user = models.ForeignKey(User, on_delete=models.SET_NULL, blank=True, null=True,)
date_created = models.DateTimeField(auto_now_add = True, blank=True, null=True)
date_expired = models.DateTimeField(default=default_time, blank=True, null=True)
expires = models.BooleanField(default=True)
def __str__(self):
return self.file.name
@models.permalink
def get_absolute_url(self):
return ('myfile:myfile-new',)
def save(self, *args, **kwargs):
self.slug = self.file.name
super(MyFile, self).save(*args, **kwargs)
def delete(self, *args, **kwargs):
self.file.delete(False)
super(MyFile, self).delete(*args, **kwargs)
class Meta:
managed = True
@receiver(pre_delete, sender=MyFile)
def remove_file(**kwargs):
instance = kwargs.get('instance')
instance.file.delete(save=False)
class Operation(models.Model):
id = models.AutoField(primary_key = True)
user = models.ForeignKey(User, blank=True, null=True)
myfile = models.ForeignKey(MyFile, blank=True, null=True)
def get_data(self):
return json.loads(self.data)
class Meta:
managed = True
class UserProfile(models.Model):
user = models.OneToOneField(User)
subscribe = models.BooleanField(default=True)
def __unicode__(self):
return u'Profile of user: %s' % (self.user.username)
class Meta:
managed = True
def create_user_profile(sender, instance, created, **kwargs):
from django.conf import settings
subscribe = False
if created:
profile, created = UserProfile.objects.get_or_create(user=instance, subscribe=subscribe)
post_save.connect(create_user_profile, sender=User)
しかしは、すべての関連myfilesと、まだ削除されました。
おかげ
UPDATE
データベースはpostgres9.3.5ある、と私は、移行前と後のNO違いをテーブルの情報を確認していないために、\ d個の+を使用しました。有線。
# \d+ ui.myproject_myfile;
Table "ui.myproject_myfile"
Column | Type | Modifiers | Storage | Stats target | Description
--------------+--------------------------+------------------------------------------------------------------+----------+--------------+-------------
id | integer | not null default nextval('ui.myproject_myfile_id_seq'::regclass) | plain | |
file | character varying(500) | not null | extended | |
slug | character varying(500) | not null | extended | |
user_id | integer | | plain | |
date_created | timestamp with time zone | | plain | |
date_expired | timestamp with time zone | | plain | |
expires | boolean | not null | plain | |
Indexes:
"myproject_myfile_pkey" PRIMARY KEY, btree (id)
"myproject_myfile_2dbcba41" btree (slug)
"myproject_myfile_e8701ad4" btree (user_id)
Foreign-key constraints:
"myproject_myfile_user_id_a422765c7101118_fk_auth_user_id" FOREIGN KEY (user_id) REFERENCES ui.auth_user(id) DEFERRABLE INITIALLY DEFERRED
Referenced by:
TABLE "ui.myproject_operation" CONSTRAINT "myproject_ope_myfile_id_3f071e8e8361943b_fk_myproject_myfile_id" FOREIGN KEY (myfile_id) REFERENCES ui.myproject_myfile(id) DEFERRABLE INITIALLY DEFERRED
Has OIDs: no
UPDATE
#ALTER TABLE ui.myproject_myfile ADD CONSTRAINT user_id_fk FOREIGN KEY (user_id) REFERENCES user(id) ON DELETE SET NULL;
その後、私は私のテーブルの記述に追加された次のを発見しました。しかし、まだ動作しません。ユーザーを削除すると、すべてのmyfilesも削除されます。 DELETE SET NULLのON "user_id_fk" FOREIGN KEY(USER_ID)REFERENCESのui.auth_user(ID)
UPDATE
私はこの投稿を削除するかどうか考えています。 VMの再起動後に問題が解決しました。いいえ、アイデア理由。しかし、皆さん、ありがとう。
に渡された呼び出し可能の使用を検討し、あなたはそれが関連myfilesということだと思いますか? –
@ElwinArensいいえ、ユーザーを削除すると、すべてのファイルも削除されます。 – BAE
愚かな質問をするには:外部キーを変更した後に、移行を実行して移行することを忘れましたか? – e4c5