我的模型.py公司名称:
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)
但是,如果用户删除了,所有相关的myfile仍然会被删除。在
有什么想法吗?谢谢
更新
数据库是postgres9.3.5,我用\d+检查迁移前后的表信息,没有区别。有线。在
^{pr2}$更新
#ALTER TABLE ui.myproject_myfile ADD CONSTRAINT user_id_fk FOREIGN KEY (user_id) REFERENCES user(id) ON DELETE SET NULL;
然后,我发现在我的表格描述中添加了以下内容。但还是没用。如果用户删除,则所有我的文件也将被删除。 “user_id_fk”外键(user_id)引用用户身份验证用户(id)删除时设置为空
更新
我正在考虑是否删除这篇文章。虚拟机重新启动后问题已解决。不知道为什么。但是谢谢你们。在
on_delete
的默认行为导致删除所有相关对象;在本例中,相关对象是MyFile。在如果您试图保留MyFile对象,可以考虑通过
on_delete=SET_DEFAULT
添加一个默认值,或者使用传递给on_default=SET(callable)
的可调用函数相关问题 更多 >
编程相关推荐