小编hei*_*idi的帖子

Django,在管理中显示和编辑反向外键关系

我正在制作一款网页游戏,其中每个世界都可以成为一个联盟的一部分。

class World(models.Model):
    # rest of Model
    alliance = models.ForeignKey('Alliance', related_name='allmember', default=None, blank=True, null=True)
    officer = models.NullBooleanField()
    leader = models.NullBooleanField()

class Alliance(models.Model):
    allianceid = models.AutoField(primary_key=True)
    alliance_name = models.CharField(max_length=20, unique=True)
    alliance_desc = models.TextField(max_length=200)
Run Code Online (Sandbox Code Playgroud)

我认为使用内联,我可以在联盟页面上显示联盟的成员。但是,我只能编辑军官和领导者状态,而我希望也能够编辑会员状态。这是我正在使用的内联。

class MemberInline(admin.TabularInline):
    model = World
    fk_name = 'alliance'
    # excludes

class AllianceAdmin(admin.ModelAdmin):
    inlines = [
        MemberInline,
    ]
Run Code Online (Sandbox Code Playgroud)

我想我真正想问的是我是否可以从目标模型而不是发起者编辑管理站点中的外键关系。

django django-models foreign-key-relationship django-admin

6
推荐指数
1
解决办法
1565
查看次数

检测Celery是否可用并正在运行

我正在使用Celery和Django进行在线游戏.

我根据这个答案编写了中间件来检查Celery是否可用并运行:检测Celery是否可用/正在运行

我的代码实际上是这样的:

from celery.task.control import inspect

class CeleryCheckMiddleware(object):

    def process_request(self, request):
        insp = inspect().stats()
        if not insp:
           return render(...)
        else:
           return None
Run Code Online (Sandbox Code Playgroud)

但是我忘记了答案底部评论中的警告,'我发现上面每次运行时都会向rabbitmq添加两个reply.celery.pidbox队列.这导致rabbitmq的内存使用量逐渐增加.

我现在(仅一天之后!)注意到从线路开始偶尔出现500次错误insp = inspect().stats()并终止OSError: [Errno 4] Interrupted system call.

是否有一种内存安全的方法来检查Celery是否可用并正在运行?

python django celery django-celery

5
推荐指数
1
解决办法
884
查看次数

强制Tkinter窗口保持全屏显示-Windows 10

我有一个Tkinter窗口,需要保持在所有其他窗口(包括全屏窗口)之上。

我尝试过的事情:

root.attributes('-topmost', True) 在mainloop之前-不起作用

self.root.wm_attributes("-topmost", True) 在班级内部-不起作用

root.overrideredirect(True) 在mainloop之前-仅适用于Linux

root.lift() 在mainloop之前-不起作用

最后,我root.lift()将被反复称为:

class TestingGUI:
    def __init__(self, root):
        self.root = root
        self.EnsureTop()

    def EnsureTop(self):
        root.lift()
        root.after(5000, self.EnsureTop)`
Run Code Online (Sandbox Code Playgroud)

从某种意义上说,它可以成功地将窗口提升到我手动切换为“始终在顶部”的任何其他窗口上,例如使用Dexpot,但至关重要的是,它不适用于全屏应用程序。

具体来说,我需要在游戏中展示它,因为它是游戏中的音乐播放器。我对需要重复使用某些命令以确保再次将窗口调用到顶部的解决方案很好。

python windows tkinter windows-10

5
推荐指数
1
解决办法
2933
查看次数