Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django模型对象和queryset保存到其他表_Python_Django_Django Models_Django Rest Framework - Fatal编程技术网

Python django模型对象和queryset保存到其他表

Python django模型对象和queryset保存到其他表,python,django,django-models,django-rest-framework,Python,Django,Django Models,Django Rest Framework,使用django 2.0.2 Python 3.4 跳过详细信息models.py class Post(models.Model): postuid = models.BigAutoField( db_column='postUID', primary_key=True) useruid = models.Foreignkey .... skip content = models.Text .... registerdate = m

使用django 2.0.2 Python 3.4

跳过详细信息models.py

class Post(models.Model):
    postuid = models.BigAutoField(
        db_column='postUID', primary_key=True)
    useruid = models.Foreignkey .... skip
    content = models.Text       .... 
    registerdate = models.Date  ....

class KeepPost(models.Model):
    keeppostuid =  models.BigAutoField(
    db_column='KeepPostUID', primary_key=True)
    useruid = models.ForeignKey(
    'Userinfo', db_column='UserUID', on_delete=models.CASCADE)
    postuid =  models.ForeignKey(
    'Post', db_column='PostUID', on_delete=models.DO_NOTHING) 
    content = models.TextField(db_column='Content')
    registerdate = models.DateTimeField(
    db_column='RegisterDate')
    keepdate = models.DateTimeField(
    db_column='KeepDate')

class ReportPost(models.Model):
    reportuid=models.BigAutoField(
    db_column='ReportUID', primary_key=True)
    postuid=models.ForeignKey(
    'Post', db_column='PostUID', on_delete=models.DO_NOTHING) 
    #useruid is reporter
    useruid=models.ForeignKey(
    'Userinfo', db_column='UserUID', on_delete=models.CASCADE)
    registerdate = models.DateTimeField(
    db_column='RegisterDate'
Post
keepost

Post.objects.get(postuid=1) or Post.objects.filter(useruid=1)
KeepPost.objects.create(modelobjects or queryset) 
get()
是返回模型对象,
filter()
是返回查询集

如果我想在报告后删除

为什么要使用on_delete DO_NOTHING->即使ReportedPost被删除,我也要保留一条记录

只有一个帖子被删除了 ex)

希望模型移动到keepost和delete

postmodel.delete()
如果用户想要删除帐户

usermodel = User.objects.get(useruid=useruid)
Postquery = usermodel.post_set.all()
reportPost = ReportPost.objects.filter(Q(postuid__in=Postquery))
我认为在intersect Postquery和reportPost之后,应该转向Keepost

usermodel.delete()

以下是我可以简单地做的

1。删除
keepost
model.

2。更改Post型号

class Post(models.Model):
    user = models.ForeignKey(User, related_name='posts', on_delete=models.CASCADE)
    content = models.TextField() 
    registerdate = models.DateTimeField(auto_now_add=True)
    is_archived = models.BooleanField(default=False)
    archived_date = models.DateTimeField()

    @property
    def archive_post(self):
        if not self.is_archived:
            self.is_archived = True
            self.archived_date = datetime.now()
            self.save()
这里发生了什么事??

  • 首先,您不需要
    keepost
    模型,因为删除并保留
    Post
    对象仍然会维护数据,所以它是多余的
  • 已删除
    postid=models.BigAutoField(db\u column='postid',primary\u key=True)
    。Django将自动分配主键id
  • 添加
    是否存档
    存档日期
    保存实例最简单的方法是根本不删除它
  • 现在在您的视图中,您可以简单地使用它,或者从单个实例获取源代码,或者从queryset获取源代码

    post = Post.objects.get(pk=1) # or id=1
    post.archive_post
    


    如果您想永远删除
    Post
    实例,请调用
    .delete()
    方法。

    以下是我可以做的简单操作

    1。删除
    keepost
    model.

    2。更改Post型号

    class Post(models.Model):
        user = models.ForeignKey(User, related_name='posts', on_delete=models.CASCADE)
        content = models.TextField() 
        registerdate = models.DateTimeField(auto_now_add=True)
        is_archived = models.BooleanField(default=False)
        archived_date = models.DateTimeField()
    
        @property
        def archive_post(self):
            if not self.is_archived:
                self.is_archived = True
                self.archived_date = datetime.now()
                self.save()
    
    这里发生了什么事??

  • 首先,您不需要
    keepost
    模型,因为删除并保留
    Post
    对象仍然会维护数据,所以它是多余的
  • 已删除
    postid=models.BigAutoField(db\u column='postid',primary\u key=True)
    。Django将自动分配主键id
  • 添加
    是否存档
    存档日期
    保存实例最简单的方法是根本不删除它
  • 现在在您的视图中,您可以简单地使用它,或者从单个实例获取源代码,或者从queryset获取源代码

    post = Post.objects.get(pk=1) # or id=1
    post.archive_post
    


    如果你想永远删除一个
    Post
    实例,那么调用
    .delete()
    方法。

    @Shift'N Tab keepost是将Post存储在delete after report中,这仍然无关紧要。。。您仍然可以利用foreignkey,即KeePost将存储Post对象这一事实。@如果我将KeePost中的postId更改为
    foreignkey(“Post”,db_column='postId',on_delete=models.DO_NOTHING)
    下一步是什么?删除所有冗余字段,您还可以发布视图吗?我可以给你一些提示,如何达到你想要达到的目标do@Shift'N选项卡我添加了更多信息。。我没有idea@Shift'N Tab Keepost是在报告后删除时存储帖子它仍然不重要。。。您仍然可以利用foreignkey,即KeePost将存储Post对象这一事实。@如果我将KeePost中的postId更改为
    foreignkey(“Post”,db_column='postId',on_delete=models.DO_NOTHING)
    下一步是什么?删除所有冗余字段,您还可以发布视图吗?我可以给你一些提示,如何达到你想要达到的目标do@Shift'N选项卡我添加了更多信息。。我不知道