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

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.执行代码

@auth
def 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错。



你可能感兴趣的:(Django)