首页 > 解决方案 > 在model.method工作后更改views.py中的变量 - Django

问题描述

每个人。

我在views.py 中有一个全局变量:它是投票的用户列表。

在我的作者被删除后,我想清空该列表。

我在 models.py 中有一个 Author.delete 方法,我可以用它来清空它,但我无法将列表导入到 models.py

视图.py

voted_list=[]

模型.py

class Author(models.Model):
    def delete(self, *args, **kwargs):
        Option.objects.filter(author_id=self.id).update(author_id=None, votes=0)
        super().delete(*args, **kwargs)

或者我可以将我的“删除”方法导入视图,例如:

视图.py

if Author.delete():
    voted_list=[]

编辑 我需要更清楚我的问题。我在视图中有一个方法:def

vote(request, author_id):
    global voted_list
    author = get_object_or_404(Author, pk=author_id)
    a= LogEntry.objects.log_action(
    user_id         = request.user.pk, 
    content_type_id = ContentType.objects.get_for_model(Option).pk,
    object_id       = Option.pk,
    object_repr     = force_text(Option), 
    action_flag     = CHANGE
)
    print("Voted:",a.user_id)
    voted_list.append(User.objects.get(pk=a.user_id))

我只想传递给投票的 user_id 的模板列表。但是在删除 Author 后将其清空。我不想使用数据库更改,因为在我目前的状态下,我认为我已经使它们过于复杂了

谢谢你。

标签: pythondjango

解决方案


首先,请注意,使用全局变量是一种不好的做法。

在我看来,您的代码看起来有点奇怪:当您删除一个Author(我假设哪个对象是Option? 的外键)时,它会自动将 this 的值设置ForeignKeyFieldNone. 因此,手动设置author_id=None感觉不对(就像您在做一些不需要的事情)。

与什么voted_list有关?

我的建议是为每个需要知道谁投票的类设置(是Option吗?),一个ManyToManyField被调用的authors_who_voted_for(例如),并手动添加任何Author实际投票给所述对象的实例。这样,如果Author要删除一个,它将自动从authors_who_voted_for. 这对您来说不是更好的解决方案吗?


推荐阅读