私信  •  关注

Iain Shelvington

Iain Shelvington 最近创建的主题
Iain Shelvington 最近回复了
1 年前
回复了 Iain Shelvington 创建的主题 » Python3将用户输入字符串解释为原始字节(例如。\x41==“A”)

将用户输入字符串解释为原始字节。您可以对字符串进行编码,然后使用 "unicode_escape" encoding 然后再次对字符串进行编码,得到字节对象

user_input_abc = '\\x41\\x42\\x43'
print(user_input_abc) # \x41\x42\x43
user_input_escaped = user_input_abc.encode().decode('unicode_escape')
print(user_input_escaped) # 'ABC'
user_input_bytes = user_input_escaped.encode()
print(user_input_bytes) # b'ABC'
2 年前
回复了 Iain Shelvington 创建的主题 » 想要在javascript中将json数组作为django变量传递吗

你应该使用 json_script 模板过滤器,将变量以可加载到JS中的格式添加到模板中

{{ variable|json_script:"foo" }}

<script>
    const foo = JSON.parse(document.getElementById('foo').textContent);
</script>
2 年前
回复了 Iain Shelvington 创建的主题 » Django post_迁移信号被多次调用

这个 post_migrate 每迁移一个应用都会发送一次信号,即使没有任何更改。通过考试 sender 参数连接信号时,仅在应用程序迁移后运行功能一次

def full_sync_if_model_change(plan, **kwargs):
    ...


class LakeSyncConfig(AppConfig):
    name = "lake_sync"

    def ready(self):
        post_migrate.connect(full_sync_if_model_change, sender=self)
1 年前
回复了 Iain Shelvington 创建的主题 » Django-在queryset结果中订购多个ManyToManyField

你可以用 prefetch_related 通过在单个查询中获取所有相关对象来优化DB查询,如果添加 Prefetch 对象,您可以更改用于预取的查询集,包括排序

qs = Collection.objects.prefetch_related(
    Prefetch('products', queryset=Product.objects.order_by('launch_date'))
)

如果总是需要这种排序,也可以只向模型中添加默认排序

class Product(models.Model):

    ...

    class Meta:
        ordering = ['launch_date']
2 年前
回复了 Iain Shelvington 创建的主题 » 根据django字段的值,在css中添加样式

你应该和 inven.quantityInventory 不只是 inven 。将模型实例与int进行比较,与int属性进行比较是没有意义的

<td class="{% if inven.quantityInventory < 10 %}color-green-primary{% else %}color-red-primary{% endif %}">{{ inven.quantityInventory }}</span></td>
2 年前
回复了 Iain Shelvington 创建的主题 » 不用数据库Django制作复杂模型

将标签添加到 Django enumeration types ,将元组传递给每个成员,其中第一个元素是值,第二个元素是自定义标签

class CallType(m.IntegerChoices):
    PULL = 1, "pulling"
    PUSH = 2, "pushing"
3 年前
回复了 Iain Shelvington 创建的主题 » 在python上查找同一字典中键和值之间的差异

可以使用集合计算两个集合之间的差异

keys = set(d1)
values = set(item for sublist in d1.values() for item in sublist)
print(keys - values)  # {'C', 'B'}
3 年前
回复了 Iain Shelvington 创建的主题 » Python-DRF返回行数,但不返回数据或结构

你需要使用 ModelSerializer

class SizeSerializer(serializers.ModelSerializer):
    ...
3 年前
回复了 Iain Shelvington 创建的主题 » 在Python中指定函数参数类型

这个 typing module List

from typing import List

def f(param: List[str]):
    pass
4 年前
回复了 Iain Shelvington 创建的主题 » 如何使用多个分隔符拆分字符串(Python)

re.split 可以在每个匹配的正则表达式上拆分字符串

>>> re.split('[/\.]', 'https://expressjs.com/en/starter/hello-world.html')
['https:', '', 'expressjs', 'com', 'en', 'starter', 'hello-world', 'html']

[/\.] 匹配任何正斜杠或句点字符

4 年前
回复了 Iain Shelvington 创建的主题 » Django HTML模板表呈现

django模板中有一些可用的变量 for loop ,其中一个被命名为 forloop.counter 它给出了循环的当前迭代。可以使用此变量在第二个循环中呈现不同的内容

<table>
  {% for rowval in results %}    
    <tr>
      {% for val in rowval %}
        {% if forloop.counter == 2 %}
          <th>{{ val }}</th>
        {% else %}
          <td>{{ val }}</td>
        {% endif %}
     {% endfor %}
    </tr>
  {% endfor %}
</table> 
4 年前
回复了 Iain Shelvington 创建的主题 » Nginx子目录上的Django重定向到根目录

你还需要重写 LOGIN_URL , STATIC_URL , LOGIN_REDIRECT_URL

4 年前
回复了 Iain Shelvington 创建的主题 » 在django中尝试上载带有ImageField的图像时出现类型错误

你的 upload_location 函数有错误。您试图格式化字符串,但未包含“替换”标记

def upload_location(instance, filename):
    return "static/img/" % (instance.id, filename)

应该是

def upload_location(instance, filename):
    return "static/img/%s/%s/" % (instance.id, filename)
4 年前
回复了 Iain Shelvington 创建的主题 » 在Python中调整图像大小

缩略图功能保留纵横比。您应该使用resize函数

image.resize(size, Image.ANTIALIAS)
4 年前
回复了 Iain Shelvington 创建的主题 » Python中lambda表达式与局部函数的速度测试

使用 min 是一个糟糕的性能度量,因为任何程序的执行速度都会受到计算机上运行的其他进程的影响。一个重要样本的平均值信息量要大得多

为什么羔羊跑得慢

foo = lambda a, b: (a + 97, b)
min(timeit.repeat(lambda:dict(map(foo, x, y))))
4 年前
回复了 Iain Shelvington 创建的主题 » 用Intcomma格式化Django中的数字

widthratio 接受论据 as <variable> ,它将计算结果存储在变量中,然后可以在模板中使用该变量

{% widthratio item.a 1 item.b as foo %}
<h2>{{ foo|intcomma }}</h2>
4 年前
回复了 Iain Shelvington 创建的主题 » 基于Django中的自定义用户类型限制对视图的访问

你可以使用 UserPassesTestMixin 混合蛋白

class YourView(UserPassesTestMixin, View):

    def test_func(self):
        return self.request.user.user_type == 'type1'
4 年前
回复了 Iain Shelvington 创建的主题 » Python不在for循环中打印文件内容

os.listdir 只返回文件名,不返回这些文件的完整路径,在打开之前需要连接目录名和文件名

import os

BASE_DIR = 'files/'
dir = os.listdir(BASE_DIR)

for file in dir:
    print(file)

    with open(os.path.join(BASE_DIR, file), 'r') as f:
        x = f.readlines()
        print(x)
4 年前
回复了 Iain Shelvington 创建的主题 » _(str)在Python中,意思是两者[副本]
4 年前
回复了 Iain Shelvington 创建的主题 » Django:检查记录是否存在于两个不同的状态

你可以用 Q 对象以创建复杂查询,包括在一个或另一个条件上进行匹配

query = Participant.objects.filter(Q(sender=A, receiver=B) | Q(sender=B, receiver=A))
query.count() == 2  # If you want to check that 2 records exist

| 在这种情况下,创建一个带有“或”的过滤器

4 年前
回复了 Iain Shelvington 创建的主题 » django如何找到不在字段中的最小值?

这可以通过使用子查询来完成

all_codes = Material.objects.values('Code')

Material.objects.annotate(
    next=F('Code') + 1
).exclude(
    next__in=all_codes
).aggregate(
    minimum_code=Min('next')
)['minimum_code']

我们发现所有行,其中代码后的下一个数不在所有的代码值中,并且该注释的最小值是表中不存在的最低值。

希望这张表能说明发生了什么

|------|------|--------------------|
| Code | next | next in all Codes? |
|------|------|--------------------|
|   1  |   2  |        True        |
|------|------|--------------------|
|   2  |   3  |        False       |  <- The minimum next not in all codes
|------|------|--------------------|
|   4  |   5  |        True        |
|------|------|--------------------|
|   5  |   6  |        True        |
|------|------|--------------------|
|   6  |   7  |        False       |
|------|------|--------------------|

记住,如果您使用的是MySQL 可怕的 在处理子查询时。在这种情况下,首先计算子查询,然后将结果作为列表传递(如果结果不太大)有时会更快 next__in=list(Material.objects.values_list('Code', flat=True))

这将只给出正确的结果,如果最小值不低于所有现有值,则应首先检查此情况。

minimum_code = Material.objects.aggregate(minimum_code=Min('Code'))['minimum_code']
if minimum_code > 1:  # Or whatever default value you want
    return 1
else:
    # Do the above
4 年前
回复了 Iain Shelvington 创建的主题 » 如何在django中使用model form编辑对象?

每个视图都应该接受GET和POST方法,当方法为GET时,表单将被实例化,没有 request.POST 传递给它的数据和表单刚刚呈现。

def newpost(request):
    if request.method == 'GET':
        form = PostForm()
    else:  # POST
        form = PostForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('newpost')
    return render(request, 'console/newpost.html', {'form':form})

def editpost(request, pk):
    obj = Post.objects.get(id=pk)
    if request.method == 'GET':
        form = PostForm(instance=obj)
    else:  # POST
        form = PostForm(request.POST, instance=obj)
        if form.is_valid():
            form.save()
            return redirect('editpost')
    return render(request, 'console/editpost.html', {'form':form})

<form method="POST">

如果不在表单上设置“action”属性,则表单会将数据提交到浏览器当前所在的URL。这样,可以对两个视图使用相同的模板

4 年前
回复了 Iain Shelvington 创建的主题 » django中的单选按钮

您的模型很好,可以删除自定义字段 division_check 只需更改窗体中的小部件和标签 Meta

class Meta:
    model = ProValue
    fields = [
        'school_name',
        'level_of_grades',
        'num_of_days',
        'division_check',
    ]
    widgets = {
        'division_check': forms.RadioSelect,
    }
    labels = {
        'division_check': 'Do you have multiple divisions for your grades?',
    }
4 年前
回复了 Iain Shelvington 创建的主题 » 用Python扩展JSON文件

这更接近你想要的吗?用新的键和值更新的字典

import json

with open('data.json') as json_data_file:
    data = json.load(json_data_file)
data['blabla3'] = 'dubdub3'
print(data)  # {'blabla1': 'dubdub1', 'blabla2': 'dubdub2', 'blabla3': 'dubdub3'}

编辑:

要同时更新多个条目,可以使用 update

data.update({
    'blabla3': 'dubdub3',
    'blabla4': 'dubdub4',
})
4 年前
回复了 Iain Shelvington 创建的主题 » Django模板添加javascript和jquery

你需要使用 staticfiles 应用程序模板标记

{% load static %}
<script src="{% static "js/script.js" %}" ></script>
4 年前
回复了 Iain Shelvington 创建的主题 » 通过Django模板文件反向查询

没有 object_list 在你的 DetailView 的上下文,只有对象。你需要移除for循环 对象列表 在模板中

 {% for contact in company.contact_set.all %}
     {{ contact.first_name }}
 {% empty %}
    <!-- no entries -->
 {% endfor %}
4 年前
回复了 Iain Shelvington 创建的主题 » Django form init override'Select a valid choice'表单验证错误

当请求方法为POST时,您不能传递 company 当你初始化表单时

form = UserRegisterForm(request.POST)

这导致您为 role 字段到 EmployeeType 公司为空的地方

# self.company will be None
self.fields['role'].queryset = EmployeeType.objects.filter(company=self.company)

你需要通过公司

form = UserRegisterForm(request.POST, company=request.tenant)    
4 年前
回复了 Iain Shelvington 创建的主题 » 如何在python中使用单词代替数值和运算符进行加法

我们可以在python中将字符串转换为等价的数字和运算符,然后对该表达式求值以得到答案。例如,我们将“2+3”转换为“2+3”,然后使用 eval

words_to_symbols = {
    'one': '1',
    'two': '2',
    'three': '3',
    'four': '4',
    'five': '5',
    'six': '6',
    'seven': '7',
    'eight': '8',
    'nine': '9',
    'plus': '+',
    'minus': '-',
    'times': '*',
    'divide': '/'
}

def parse_and_eval(string):
    # Turn words into the equivalent formula
    operation = ''.join(words_to_symbols[word] for word in string.split())
    return eval(operation)

parse_and_eval('two plus three')  # returns 5
4 年前
回复了 Iain Shelvington 创建的主题 » Django循环保存所有现有记录,但只保存一条记录

您可以有许多同名的输入,这可以重复

<input type="file" name="myfile">

在您的视图中,可以使用 getlist

files = request.FILES.getlist('myfile')

然后循环查看视图中的文件

V_insert_data = StudentsEnrollmentRecord(
    Student_Users=studentname,
    Payment_Type=payment,
    Education_Levels=educationlevel,
    School_Year=schoolyear
)
for file in request.FILES.getlist('myfile'):
    StudentsSubmittedDocument.objects.create(
        Students_Enrollment_Records=V_insert_data,
        Document=file
    )
4 年前
回复了 Iain Shelvington 创建的主题 » 如何计算特定目录中的文件数,而不扫描python中的子文件夹

如果您使用的是python>=3.4版本,则可以使用 pathlib

base_path = pathlib.Path(file_path)
num_spreadsheets = len(list(base_path.glob('*.xlsx')))
4 年前
回复了 Iain Shelvington 创建的主题 » python方法1变量嵌套字典

此函数将递归查找传递给它的字典中的键。 d 并返回上次成功的查找

def get_nested(d, key):
    result = d.get(key)
    if isinstance(result, dict):
        return result or get_nested(result, key)
    return result

可以这样称呼

get_nested(dct, 'hits')
get_nested(dct, 'aggregations')
4 年前
回复了 Iain Shelvington 创建的主题 » 如何使用django将列表数据存储到数据库中?

一个简单的解决方案是迭代标记并为每个标记创建一个对象

tags = tag_name.split()
for tag in tags:
    Tag.objects.create(tag_name=tag)

formsets 可以提供一个很好的解决方案来编辑/创建同一模型的多个

4 年前
回复了 Iain Shelvington 创建的主题 » 在django模型中,如何用“timestamp”作为主键覆盖“id”作为主键?

将字段设置为主键的方法是

field_name = models.FieldType(primary_key=True)