[django]在删除文章所关联的分类的时候,属于该分类的文章都被删除了。

来源:互联网 发布:万维网域名续费 编辑:程序博客网 时间:2024/04/30 12:42

1.关系代码


分类的模型:

class Category(models.Model):    """    博主个人文章分类表    """    nid = models.AutoField(primary_key=True)    title = models.CharField(verbose_name='分类标题', max_length=32,unique=True)    blog = models.ForeignKey(verbose_name='所属博客', to='Blog', to_field='nid')
文章的模型:

class Article(models.Model):    '''    文章详细    '''    nid = models.BigAutoField(primary_key=True)    title = models.CharField(verbose_name='文章标题',max_length=128)    summary = models.CharField(verbose_name='文章简介',max_length=255)    read_count = models.IntegerField(default=0)    comment_count = models.IntegerField(default=0)    up_count = models.IntegerField(default=0)    down_count = models.IntegerField(default=0)    create_time = models.DateTimeField(verbose_name='创建时间',auto_now_add=True)    blog = models.ForeignKey(verbose_name='所属博客',to='Blog',to_field='nid')    category = models.ForeignKey(verbose_name='文章类型', to='Category', to_field='nid', null=True,on_delete=models.SET_NULL)

2.执行代码

@authdef delete_category(request):    if request.method == 'POST':        data = request.POST.get('nid')        blog_id = request.session['user_info']['blog__nid']        models.Category.objects.filter(nid=data).delete()        return HttpResponse(200)
通过分类的nid删除对象,被关联的文章间接被django默认级联删除了。


3.解决办法:

将文章的模型中,关联分类的category属性设为:

category = models.ForeignKey(verbose_name='文章类型', to='Category', to_field='nid', null=True,on_delete=models.SET_NULL)


4.相关资料

给ForeignKey增加属性,

on_delete=models.SET_NULL

即可。

该属性还有其他值可选:


CASCADE: 默认的,级联删除


PROTECT: 通过抛出django.db.models.ProtectedErrordjango.db.models.ProtectedError错误来阻止删除关联的对象


SET_NULL: 设置ForeignKey 为 null; 这个只有设置了null 为 True的情况才能用

SET_DEFAULT: 设置 ForeignKey 为默认值; 默认值必须预先设置

SET(): 设置为某个方法返回的值


DO_NOTHING: 什么都不做,如果数据库设置必须关联则会报IntegrityError错。



阅读全文
0 0
原创粉丝点击