小编use*_*631的帖子

在excel文件中写入字典值

我有一个字典,每个键有多个值.我使用以下代码添加值:

d.setdefault(key, []).append(values)
Run Code Online (Sandbox Code Playgroud)

键值对应关系如下:

a -el1,el2,el3
b -el1,el2
c -el1
Run Code Online (Sandbox Code Playgroud)

我需要循环通过字典并写入excel文件:

Column 1  Column 2
a         el1
          el2
          el3
b         el1
          el2
c         el1
Run Code Online (Sandbox Code Playgroud)

要在excel文件中写入,我使用xlsxwriter.我需要帮助通过字典单独循环,因为在写完密钥后我不需要再写它,直到我完成所有相应的值.

python arrays dictionary python-3.x

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

查询集和切片的问题

我有2种型号,CompanyProductProduct有一个ForeignKey到Company

class Product(Meta):
    company = models.ForeignKey(
        Company, 
        related_name='products', 
        on_delete=models.CASCADE
    )
Run Code Online (Sandbox Code Playgroud)

我做了以下过滤:

 company = Company.objects.filter(account=account, pk=company_pk)
        if not company:
            raise Http404
        product = Product.objects.filter(company=company, pk=product_pk)
        if not product:
            raise Http404
        return product
Run Code Online (Sandbox Code Playgroud)

我有以下错误:

The QuerySet value for an exact lookup must be limited to one result using slicing.
Run Code Online (Sandbox Code Playgroud)

company_pk而且product_pk只是变量.如果我删除了产品过滤器,则没有错误.

我认为它发生是因为公司结果是一个QuerySet并作为参数被推送 Product.objects.filter

django django-queryset

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

覆盖Django小部件的默认模板

我想覆盖Django(2.01)小部件模板,因为我需要为每个输入,标签添加类,并以不同的方式定位它们

app
 - templates
 - app 
    - django
       - forms
           - widgets
             - input.html
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 要么

app
 - templates
   - django
      - forms
          - widgets
             - input.html
Run Code Online (Sandbox Code Playgroud)

或模板项目目录:

- templates
   - django
      - forms
          - widgets
             - input.html
Run Code Online (Sandbox Code Playgroud)

它们都不起作用(即使我这是在文档中推荐的方式,也是我在stackoverflow上看到的答案),它仍然从默认加载.

作为一般的小部件的模板,我宁愿把他们的模板项目目录,但是从我的芦苇默认情况下,小部件安装的应用程序只搜索.

django django-templates django-widget

10
推荐指数
1
解决办法
1089
查看次数

Vuejs - 手风琴

我正在尝试使用vuejs创建一个手风琴.

我在网上找到了一些例子,但我想要的是不同的.对于搜索引擎优化的目的,我使用"是"和"内联模板",所以手风琴是一种静态的,没有在Vuejs中完全创建.

我有2个问题/疑问:

1)我需要根据用户交互(点击)在组件上添加一个"is-active"类,因此我收到以下错误.

属性或方法"contentVisible"未在实例上定义,但在呈现期间引用.确保在数据选项中声明反应数据属性.

这可能是因为我需要在实例级别设置它.但是"contentVisible"具有每个组件不同的值(true或false).

所以我想在实例级别使用一个"contentVisible"数组和一个props(通过实例传递)和子节点上的自定义事件来更新实例值.

2)可以工作,但它是一个静态数组.如何制作动态数组(不知道项目组件的数量)?

<div class="accordion">
    <div>
        <div class="accordion-item" is="item"  inline-template :class="{ 'is-active':  contentVisible}" >
            <div>
                <a @click="toggle" class="accordion-title"> Title A1</a>
                <div v-show="contentVisible" class="accordion-content">albatros</div>
            </div>
        </div>
        <div class="accordion-item" is="item"  inline-template :class="{ 'is-active': contentVisible}" >
            <div>
                <a @click="toggle" class="accordion-title"> Title A2</a>
                <div v-show="contentVisible" class="accordion-content">lorem ipsum</div>
            </div>
        </div>

    </div>
Run Code Online (Sandbox Code Playgroud)

var item = {
  data: function() {
      return {
          contentVisible: true
      }
  },

  methods: {
      toggle: function(){
          this.contentVisible = !this.contentVisible
      }
  }
}

new Vue({
    el:'.accordion',
    components: {
        'item': …
Run Code Online (Sandbox Code Playgroud)

javascript vue.js vue-component

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

使用多个单词或部分单词的Search Vector进行Django搜索

对于搜索,我想使用PostgreSQL的搜索矢量;

我写了一个自定义查询方法:

  def search(self, text):

        search_vectors = (
            SearchVector('name', weight='A', config='english') +
            SearchVector('short_description', weight='B', config='english') +
            SearchVector('description', weight='C', config='english')
        )
        search_query = SearchQuery(text)
        search_rank = SearchRank(search_vectors, search_query, weights=[0.2, 0.4, 0.6, 1])

        return self.annotate(rank=search_rank).filter(rank__gte=0.2).order_by('-rank').
Run Code Online (Sandbox Code Playgroud)

有2个“问题”。例如,如果搜索“ Eric”名称,则:

  • 'eric'我得到正确的结果
  • '艾里克·约翰'我没有结果
  • 'eri'我没有结果

我有点理解为什么它会失败,但是我不知道如何实施这些修复程序。

python django django-queryset

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

检查小部件级别的错误和其他值 - 可能使用自定义表单字段

如果某个字段有小部件错误,我如何访问?

使用默认我试过:

{% if widget.attributes.has_errors %} or {% if widget.has_errors %}
Run Code Online (Sandbox Code Playgroud)

但是没有用.

我使用自定义窗口小部件模板,我想使用自定义窗体字段并覆盖默认字段.

我知道clean方法存在,但我不知道如何向我的小部件推送我想要的动态(非默认)数据/属性.

我试过了:

class AWidget(forms.Widget):

    def get_context(self, name, value, attrs):

        context = super().get_context(name, value, attrs)
        has_errors = context['widget']['attrs'].pop('has_errors', None)
         context['widget']['has_errors'] = has_errors
Run Code Online (Sandbox Code Playgroud)

它适用errors但我不知道是否是最好的选择加上我想从Form Field传递其他值/属性,我认为最好尝试覆盖Form Field但我不确切知道如何.

还使用以下方式访问各个属

 {{ widget.attrs.maxlength }} or  {{ widget.attrs.items.maxlength }}
Run Code Online (Sandbox Code Playgroud)

即使在for循环中加入也是如此


我知道我可以添加一个带有一类错误的父div:

 <div class="{% if form.field.errors %}pass_error{% endif %}">
        {{ form.field }} 
    </div>
Run Code Online (Sandbox Code Playgroud)

但是,这意味着css级别的重大变化.

我已经使用自定义小部件覆盖所有Django小部件,错误我不仅需要更改边框颜色,而是显示或不显示小部件模板的不同元素以及其中一些的位置发生变化.

我已经修改了基于窗口小部件以添加错误,但是我希望通过从字段传递到窗口小部件,以及根据错误类型的参数,以更优雅的方式在字段级别执行此操作.

所以我的问题是我需要覆盖从字段传递到窗口小部件错误和其他变量?

django django-forms django-widget

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

Peewee ORM - 将多个数据库中的数据复制到一个主数据库中

我想从多个数据库复制数据,处理它们,然后将它们移动到主数据库。所有数据库都具有相同的架构。

即使我打开和关闭数据库,peewee 总是连接到同一个数据库(列表中的第三个)并且不遵守连接顺序。

databases = [spie_db, opticsorg_db, phcom_db]


# map to a dictionary the values from the record
def mapping(record):
    comp_d = {'name': record.name,
              'address': record.address,
              'country': record.country,
              'website': record.website,
              'domain':  record.domain
              }
    return comp_d


def merge_data():
    company_list = []
    for database in databases:
        database.connect()
        # cycle trough db
        for record in Company.select():
            # append each record to the list
            company_list.append(mapping(record))
        database.close()
    return company_list


# get data from the other databases
companies = merge_data()
# the merge database
db.connect()
# …
Run Code Online (Sandbox Code Playgroud)

python database sqlite python-3.x peewee

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

将ManyToMany字段的Widget自定义为具有循环ForeignKey的Model

我有两个型号分类和产品.

  • 产品可以有多个类别
  • 一个类别可以有多个产品.
  • 类别具有循环外键,本身.
  • 并非所有类别都具有相同的深度级别

例:

  • A类
    • A_1类
    • 类别A_2
      • 类别A_2_1
  • B类
  • C类
    • C_1类

models.py

class Product:
    categories = models.ManyToManyField(Category)
    name = models.CharField(max_length=255)

class Category:
    categories = models.ForeignKey(self)
    name = models.CharField(max_length=255)
Run Code Online (Sandbox Code Playgroud)

作为表单我使用ModelForm:

class ProductForm(ModelForm):
    class Meta:
        model = Product
        fields = ['categories', 'name', 'short_description', 'description']
        widgets = {
            'categories': MyWidget,
        }
Run Code Online (Sandbox Code Playgroud)

我想要实现的目标:

我想实现条件选择(窄选项)在产品表单创建上:

  1. 只有顶级父类别(级别0 A,B,C)可用
  2. 用户选择父类别.如果父母有孩子,他的孩子会出现一个新的选择框(类别1 A1,C1)
  3. 用户选择1级类别(A1,C1).如果父母有孩子,他的孩子会出现一个新的选择框(2级A2)

    • 重复该过程,直到没有子项可用(递归),用户选择树中的"最小"类别
    • 用户可以使用新按钮添加更多类别并再次启动1-3流程
    • 我想做选择,使用JavaScript添加新选择
    • 在表单提交我想只发送最后的子类别

选项我想:

  1. 更改ManyToMany相应的默认字段 - 看起来没有好的挂钩和/或继承
  2. 使用ManytoMany的非默认自定义字段instean(如Charfield) - 在清理,保存表单上更复杂
  3. 更改/继承小部件.我的问题是如何在提交时将数据发送到默认字段,并在编辑时显示/显示它

实用,假设我有7个选择框,每个框的值都是:

  1. Parent1-> Child11-> Child111
  2. Parent2-> Child21
  3. Parent3-> Child31-> Child311

如何告诉Django浏览器提交(以及其他数据)发送给ManyToMany的所有三个中的最后一个Child

我可以用Javascript收集它们,但我必须告诉Django获取这些数据,这就是你需要的. …

django django-forms django-widget

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

在Django中无法捕获Celery操作错误

我有以下代码:

def save()
   super().save(*args, **kwargs)
   try:
       transaction.on_commit(lambda: c_task.delay(a, b, self.pk))
   except Exception as e:
       print(e)

@app.task(bind=True, name='c_task', max_retries=4, soft_time_limit_exception=300)
def c_task(self, a, b, i):

    from .models import ModelA

    try:
        json_data = entity(a,b,i, const)
        .....
    except Exception as e:

        raise self.retry(exc=e, countdown=exponential_backoff(self))
Run Code Online (Sandbox Code Playgroud)

如果Redis服务器失败,我会收到和OperationalError。我尝试像以前一样使用Celery OperationalError或通用异常来捕获它。

该行仍在执行并引发错误。如果Redis失败,我不希望一切都失败,因为我的代码有一个“解决方法”,但我无法捕获错误。

追溯:

 transaction.on_commit(lambda: c_task.delay(a, b, self.pk))

\lib\site-packages\celery\app\task.py in delay

            return self.apply_async(args, kwargs)

lib\site-packages\celery\app\task.py in apply_async

                **options

\lib\site-packages\celery\app\base.py in send_task

                    amqp.send_task_message(P, name, message, **options)

\lib\contextlib.py in __exit__

                    self.gen.throw(type, value, traceback)

\lib\site-packages\kombu\connection.py in _reraise_as_library_errors

                        sys.exc_info()[2])

\lib\site-packages\vine\five.py in reraise

                raise …
Run Code Online (Sandbox Code Playgroud)

django celery

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

Nginx与gunicorn双重授权

我想使用http auth,但也使用gunicorn的反向代理.

对于http auth,我使用:

location = admin.html {
 auth_basic 'Login Required'
 auth_basic__use_file etc/nginx/.htpasswd;
}
Run Code Online (Sandbox Code Playgroud)

对于gunicorn,代理反向我发现:

try_files $uri @gunicorn;
Run Code Online (Sandbox Code Playgroud)

我如何将两者结合起来?

python nginx gunicorn

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