1. 程式人生 > 實用技巧 >django python 修改外來鍵從表的非主鍵欄位值的方法

django python 修改外來鍵從表的非主鍵欄位值的方法

如何修改從表Category表中的parent_project對應從表的need_create_file欄位的值?

class Category(models.Model):
    
    id = models.UUIDField(auto_created=True,default=uuid.uuid1,primary_key=True,editable=False,db_index=True,blank=False,unique=True,verbose_name='分類主鍵',help_text='分類主鍵')
    name = models.CharField(max_length=200,blank=False,verbose_name='元件名',help_text='元件名')
    desc = models.CharField(max_length=200,blank=True,verbose_name='元件描述',help_text='元件描述')
    category_type = models.IntegerField(choices=settings.CATEGORY_TYPE,verbose_name='元件級別',help_text='元件級別')
    status = models.IntegerField(default=0,verbose_name='元件狀態',help_text='元件狀態')
    create_time =  models.DateTimeField(verbose_name='建立時間',default=datetime.now,help_text='建立時間')
    create_user = models.ForeignKey(User,null=True,blank=True,related_name='category_create_user',help_text='建立使用者',verbose_name='建立使用者',on_delete=models.SET_NULL)
    attorn_time = models.DateTimeField(verbose_name='修改時間',default=datetime.now,help_text='修改時間')
    attorn_user = models.ForeignKey(User,null=True,blank=True,related_name='category_attorn_user',help_text='修改使用者',verbose_name='修改使用者',on_delete=models.SET_NULL)
    parent_category = models.ForeignKey('self',null=True,blank=True,default=None,db_index=True,help_text='所屬模組',verbose_name='所屬模組',related_name='child',on_delete=CASCADE)
    parent_project = models.ForeignKey(ProjectAuto,null=True,blank=True,db_index=True,default=None,help_text='歸屬專案',verbose_name='歸屬專案',to_field='auto_id')

  

class ProjectAuto(models.Model):
    """
        指令碼執行
    """
    auto_id = models.UUIDField(auto_created=True,default=uuid.uuid1,primary_key=True,db_index=True,blank=False,unique=True,verbose_name='專案主鍵',help_text='專案主鍵')
    project_id = models.ForeignKey(Project,verbose_name='案例專案編號',help_text='案例專案編號',blank=True,null=True,related_name='auto_cate')
    create_time = models.DateTimeField(verbose_name='建立時間',default=datetime.now,help_text='建立時間')
    create_user = models.ForeignKey(User, null=True, blank=True, verbose_name='建立使用者',help_text='建立使用者',related_name='create_user',on_delete=models.SET_NULL)
    attorn_user = models.ForeignKey(User, null=True, blank=True, verbose_name='授權使用者',help_text='授權使用者',related_name='attorn_user',on_delete=models.SET_NULL)
    attorn_time = models.DateTimeField(null=True, blank=True,verbose_name='授權時間',default=None,help_text='授權時間')
    project_name = models.CharField(unique=True,null=False, blank=False,max_length=200,verbose_name='專案名稱',help_text='專案名稱')
    project_path = models.CharField(default=settings.JOB_FILES_PATH,max_length=300,verbose_name='專案存放路徑',help_text='專案存放路徑')
    allow_other_edit = models.BooleanField(verbose_name='是否允許其它使用者編輯',default=False,help_text='是否允許其它使用者編輯')
    need_create_file = models.BooleanField(verbose_name='是否需要重新生成實體工程',default=True,help_text='是否需要重新生成實體工程')
    old_project = models.BooleanField(verbose_name='是否舊工程',default=False,help_text='是否舊工程')
    version = models.DecimalField(default=0.1,blank=True,decimal_places=1,max_digits=10,help_text='元件版本號',verbose_name='元件版本號')
    dept_project_name = models.CharField(null=True, blank=True,default=None,max_length=200,verbose_name='倉庫專案名稱',help_text='倉庫專案名稱')
    

  

實現方法:

cate_obj=Category.objects.filter(pk=category_id).first()
category_ = category_obj.parent_category.parent_project
category_.need_create_file=True
category_.save()