小编43T*_*cts的帖子

Django GenericTabularInline:(admin.E302)'ct_field'引用'content_type',它不是一个字段

我正在尝试使用Generic Foreign Keys的模型(Prereq)出现在MyModel的管理员中.

models.py:

class MyModel(models.Model):
    name = models.CharField(max_length=50, unique=True)
    #etc

class Prereq(models.Model):
    parent_content_type = models.ForeignKey(ContentType, related_name='prereq_parent')
    parent_object_id = models.PositiveIntegerField()
    parent_object = GenericForeignKey("parent_content_type", "parent_object_id")

    prereq_content_type = models.ForeignKey(ContentType, related_name='prereq_item')
    prereq_object_id = models.PositiveIntegerField()
    prereq_object = GenericForeignKey("prereq_content_type", "prereq_object_id")
    prereq_invert = models.BooleanField(default=False, help_text = 'parent is available if user does NOT have this pre-requisite')

    or_prereq_content_type = models.ForeignKey(ContentType, related_name='or_prereq_item', blank=True, null=True)
    or_prereq_object_id = models.PositiveIntegerField(blank=True, null=True)
    or_prereq_object = GenericForeignKey("or_prereq_content_type", "or_prereq_object_id")
    or_prereq_invert = models.BooleanField(default=False, help_text = 'parent is available if user does NOT have this pre-requisite')`
Run Code Online (Sandbox Code Playgroud)

Admin.py: …

django

4
推荐指数
1
解决办法
508
查看次数

如何检查Django项目中使用的数据库

在我的Django项目中,我想使用一个只在postgresql中可用的queryset方法,如果正在使用postgresql.

如何从settings.DATABASES检查数据库?

假设这个结构:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2', # could be: 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'
Run Code Online (Sandbox Code Playgroud)

我的python技能太弱,无法遍历字典结构=(

python django

4
推荐指数
2
解决办法
1325
查看次数

Django从查询集中填充form.ChoiceField字段,并将选择关联回模型对象

我有一个简单的形式:

class SubmissionQuickReplyForm(forms.Form):
    comment_text = forms.CharField(label='', required=False, widget=forms.Textarea(attrs={'rows':2}))
Run Code Online (Sandbox Code Playgroud)

我想在表单中添加一个form.ChoiceField,其中ChoiceField中的选项是从查询集中填充的.

class SubmissionQuickReplyForm(forms.Form):
        comment_text = forms.CharField(label='', required=False, widget=forms.Textarea(attrs={'rows':2}))
        choice = forms.ChoiceField(...)
Run Code Online (Sandbox Code Playgroud)

例如,如果我有:

q = MyChoices.Objects.all()
Run Code Online (Sandbox Code Playgroud)

如何用q的内容填充ChoiceField,这样当我在视图中处理表单的结果时,我可以在最后将对象取回?

    if request.method == "POST":
        form = SubmissionQuickReplyForm(request.POST)
        if form.is_valid():
            ch = get_object_or_404(MyChoices, pk=?)
            # How do I get my object from the choice form field?
Run Code Online (Sandbox Code Playgroud)

django django-forms choicefield

4
推荐指数
2
解决办法
1万
查看次数

X-FRAME-OPTIONS: DENY 通过 nginx 来自 Django 站点在哪里?

我的 Django 站点在 iframe 中使用django-summernote,并抛出此错误:

加载“ http://example.com/summernote/editor/id_comment_text/ ”时遇到多个具有冲突值(“SAMEORIGIN、DENY”)的“X-Frame-Options”标头。回到“拒绝”。

我不知道拒绝来自哪里。

在我的 Django 项目设置中,我有:

MIDDLEWARE_CLASSES = (
    ...
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    ...
)
Run Code Online (Sandbox Code Playgroud)

其中:“默认情况下,中间件将为每个传出的 HttpResponse 将 X-Frame-Options 标头设置为 SAMEORIGIN。”

我还在我的 nginx.conf 中添加了这个(来自这里):

add_header X-Frame-Options SAMEORIGIN;
Run Code Online (Sandbox Code Playgroud)

其他可能相关的信息:当我将服务器从 Ubuntu 14.04 升级到 16.04 以及项目的虚拟环境从 Python 3.4 升级到 Python 3.5 时出现了问题。Django 和 django-summernote 的版本还是一样的。

如何找到此拒绝设置的来源?

django iframe nginx http-headers

4
推荐指数
1
解决办法
4844
查看次数

从大型且不断增长的数据集中优化慢速django查询集

我的页面加载速度太慢.不知何故,我需要改进查询数据的方式(缓存?部分加载/页面等等)

注意我是一个django noob,并没有完全包裹我的头model.Manager,models.query.QuerySet所以如果这个设置看起来很尴尬....

目前,页面加载查询集大约需要18秒,目前只有大约500条记录.每天平均会有大约100条新记录.

网络统计

该数据库是Postgresql

视图:

def approvals(request):
    ...
    approved_submissions = QuestSubmission.objects.all_approved()
    ...
Run Code Online (Sandbox Code Playgroud)

查询集:

class QuestSubmissionQuerySet(models.query.QuerySet):
    ...

    def approved(self):
        return self.filter(is_approved=True)

    def completed(self):
         return self.filter(is_completed=True).order_by('-time_completed')

    ...

class QuestSubmissionManager(models.Manager):
    def get_queryset(self):
        return QuestSubmissionQuerySet(self.model, using=self._db)

    def all_approved(self, user=None):
        return self.get_queryset().approved().completed()

    ...
Run Code Online (Sandbox Code Playgroud)

产生的SQL来自QuestSubmission.objects.all_approved():

'SELECT "quest_manager_questsubmission"."id", "quest_manager_questsubmission"."quest_id", "quest_manager_questsubmission"."user_id", "quest_manager_questsubmission"."ordinal", "quest_manager_questsubmission"."is_completed", "quest_manager_questsubmission"."time_completed", "quest_manager_questsubmission"."is_approved", "quest_manager_questsubmission"."time_approved", "quest_manager_questsubmission"."timestamp", "quest_manager_questsubmission"."updated", "quest_manager_questsubmission"."game_lab_transfer" FROM "quest_manager_questsubmission" WHERE ("quest_manager_questsubmission"."is_approved" = True AND "quest_manager_questsubmission"."is_completed" = True) ORDER BY "quest_manager_questsubmission"."time_completed" DESC'
Run Code Online (Sandbox Code Playgroud)

缓慢的模型:

class …
Run Code Online (Sandbox Code Playgroud)

python django postgresql performance django-queryset

3
推荐指数
2
解决办法
3519
查看次数

如何在 ggplot 中重新排列图例顺序

我有一个带有两个图例的 ggplot,如何重新排列该图图例的顺序,以便样本大小出现在 Party 下方?

文档展示了如何对qplo t 执行此操作,但我无法从该跳跃到我拥有的代码。

这里也没有找到。

r ggplot2

3
推荐指数
1
解决办法
2930
查看次数

为什么在空的 Django 查询集上使用 .latest() 会返回...什么也没有?

下面是一些构建查询集并在每个步骤打印输出的代码(用于调试):

qs = self.get_queryset(True)
print(qs)  #   [<MyModel: obj_1>, <MyModel: obj_2>, <MyModel: obj_2>, <MyModel: obj_3>]
qs = qs.get_user(user)
print(qs)  # []
qs = qs.completed()
print(qs)  # []
qs = qs.latest('time_completed')
print(qs)  #    <-- What happened?  Why is this blank?
print(qs is None) # False <-- huh??
print("nothing") if not qs else print("something") #   <-- blank?!?! how?!
print(type(qs)) # 
Run Code Online (Sandbox Code Playgroud)

最后一个操作qs.latest('time_completed')打印空白,类型为空白,if 语句被忽略。这里发生了什么?

结果不是空查询集的示例工作正常(注意所有项目都是单个用户,只是巧合):

qs = self.get_queryset(True)
print(qs)  #  [<MyModel: obj_1>, <MyModel: obj_2>, <MyModel: obj_2>, <MyModel: obj_3>]
qs = qs.get_user(user)
print(qs)  # …
Run Code Online (Sandbox Code Playgroud)

python django django-queryset

3
推荐指数
2
解决办法
3486
查看次数

在Django中检测更改的密码

当用户更改密码时,我想发送一个信号,以便我可以在某些型号上做一些事情.

我该如何创建此信号?

我查看post_save了用户的信号:

post_save.connect(user_updated, sender=User)
Run Code Online (Sandbox Code Playgroud)

但是,我似乎没有任何东西可以检查密码是否已更改:

def user_updated(sender, **kwargs):
    print(kwargs) # {'created': False, 'raw': False, 'instance': <User: 100002>, 'update_fields': None, 'signal': <django.db.models.signals.ModelSignal object at 0x7ff8862f03c8>, 'using': 'default'}
Run Code Online (Sandbox Code Playgroud)

我也看到有一个password_change_doneauth视图,但我不确定我是如何使用它的.https://docs.djangoproject.com/en/1.10/topics/auth/default/#built-in-auth-views

有任何想法吗?

python django django-signals django-authentication

3
推荐指数
2
解决办法
1598
查看次数

在 Django 中测试表单视图时指定提交按钮

我正在尝试测试 django 表单视图:

测试.py

form_data = {
    'comment_text': "test comment"
}
response = self.client.post(reverse('announcements:comment', args=[self.test_announcement.id]), form_data)
self.assertEqual(response.status_code, 404)  # invalid submit button
Run Code Online (Sandbox Code Playgroud)

但我的视图会检查使用哪个按钮来提交表单:

视图.py

def my_view(request, announcement_id):
  # ...

  if request.method == "POST":
    form = CommentForm(request.POST)
    if form.is_valid():
       # ...
       if 'comment_button' in request.POST:  
           # how do I get inside this branch from a test?
           # process form
       else:
           raise Http404
Run Code Online (Sandbox Code Playgroud)

我如何模仿在测试中用于提交表单的“comment_button”?

django django-views django-tests

3
推荐指数
1
解决办法
440
查看次数

uwsgi:运行时错误:无法释放未获取的锁

我正在运行 uwsgi (在 docker 容器中使用 django),并且生成的每个工作进程都会出现以下错误:

spawned uWSGI master process (pid: 1)
web_1          | spawned uWSGI worker 1 (pid: 18, cores: 2)
web_1          | Exception ignored in: <function _after_at_fork_child_reinit_locks at 0x7fd944954ca0>
web_1          | Traceback (most recent call last):
web_1          |   File "/usr/local/lib/python3.8/logging/__init__.py", line 260, in _after_at_fork_child_reinit_locks
web_1          | spawned uWSGI worker 2 (pid: 19, cores: 2)
web_1          |     _releaseLock()  # Acquired by os.register_at_fork(before=.
web_1          |   File "/usr/local/lib/python3.8/logging/__init__.py", line 228, in _releaseLock
web_1          |     _lock.release()
web_1          | RuntimeError: cannot release un-acquired …
Run Code Online (Sandbox Code Playgroud)

python django worker uwsgi

3
推荐指数
1
解决办法
6517
查看次数