小编Ste*_*evy的帖子

Django 唯一约束

语境

我有模型AppVersionApp& DeployApp。在AppVersion 模型中,用户可以将 APK 文件上传到文件系统。我使用的pre_save信号,以防止同样的上传APK文件version_code的具体App是这样的:

@receiver(pre_save, sender=AppVersion)
def prevent_duplicate_version_code(sender, instance, **kwargs):
    qs = AppVersion.objects.filter(app_uuid=instance.app_uuid, version_code=instance.version_code)
    if qs.exists():
        raise FileExistsError("Version code has to be unique for a specific app")
Run Code Online (Sandbox Code Playgroud)

这个信号做我想要的,除了当我试图在 bridge-table 中创建一个对象时它也会引发错误DeployApp

楷模

# models.py

class App(models.Model):
    app_uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, db_index=True)
    app_name = models.CharField(max_length=100)


class AppVersion(models.Model):
    app_version_uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, db_index=True)
    app_uuid = models.ForeignKey(App, on_delete=models.CASCADE, related_name='app_versions')
    app_version_name = models.CharField(max_length=100)
    version_code = models.IntegerField(blank=True, null=True, …
Run Code Online (Sandbox Code Playgroud)

python django unique-constraint

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

如何在将 ImageField 图像保存到 python Django 模型之前调整其大小

我正在尝试实现一个 Django ImageField 类函数来调整图像大小,但是我不确定这个函数在哪里接受我的新图像尺寸

在 Linux 和 Python 3.7 上运行

我看过这个文档,但不太理解它:https : //docs.djangoproject.com/en/1.11/_modules/django/db/models/fields/files/#ImageField

如果有人可以向我展示如何使用此功能的示例,我将不胜感激。

编辑

我还没有成功地调整我的图像尺寸,这就是我想要实现的。鉴于它正在被获取,ImageField我如何在保存它之前调整它的大小(我找到了update_dimensions_fields类函数,ImageField但是我不知道如何使用它)

class Posts(models.Model):
    title = models.CharField(max_length=200, blank=True)
    body = models.TextField(blank=True)
    created_at = models.DateTimeField(default=datetime.datetime.now)
    post_image = models.ImageField(upload_to=get_image_path, blank=True, null=True)

    def __str__(self):
        return self.title

    def save(self, *args, **kwargs):
        # I would like to use the function beneath to resize my images before I save them to my database
        self.post_image.update_dimension_fields(self, instance, force=False, *args, **kwargs)

        super().save(*args, **kwargs) # Call the "real" save() …
Run Code Online (Sandbox Code Playgroud)

python django

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

DJANGO_SETTINGS_MODULE 未命名模块

我正在尝试为我的数据库创建一个填充脚本,但我收到一个 No module named 错误。

Project Structure:
staticone/
    manage.py
    mysite/
      populate_rango
      settings
      urls
      __init__
      wsgi
      rango/    
Run Code Online (Sandbox Code Playgroud)

追溯:

Traceback (most recent call last):
File "populate_rango.py", line 8, in <module>
django.setup()
File "/home/ubuntu/virtenv/webstatic/lib/python3.5/site-
packages/django/__init__.py", line 27, in setup
apps.populate(settings.INSTALLED_APPS)
File "/home/ubuntu/virtenv/webstatic/lib/python3.5/site-
packages/django/apps/registry.py", line 85, in populate
app_config = AppConfig.create(entry)
File "/home/ubuntu/virtenv/webstatic/lib/python3.5/site-
packages/django/apps/config.py", line 116, in create
mod = import_module(mod_path)
File "/usr/lib/python3.5/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 986, in _gcd_import
File "<frozen importlib._bootstrap>", line 969, in …
Run Code Online (Sandbox Code Playgroud)

django django-settings python-3.x

7
推荐指数
1
解决办法
5249
查看次数

Postgres docker “用户“postgres”没有分配密码。”

我正在使用 docker 运行 Postgres 图像。它曾经在 Windows10 和 Ubuntu 18.04 上运行没有任何问题。

在 Ubuntu 系统上重新克隆项目password authentication failed for user "postgres"后,运行docker-compose up.

在Ubuntu系统上重新克隆项目之前,它曾经运行没有任何问题,它在Windows10系统上仍然可以正常运行。

我的docker-compose.yml

version: '2'

services:
  postgresql:
    image: 'bitnami/postgresql:latest'
    ports:
      - '5432:5432'
    environment:
      - POSTGRESQL_USERNAME=someuser
      - POSTGRESQL_PASSWORD=mysecretpassword
      - POSTGRESQL_DATABASE=mydatabase
Run Code Online (Sandbox Code Playgroud)

我试图sudo docker system prune删除所有停止的容器及其未使用的网络。这并不能解决问题。

我需要更改/做什么才能使 Postgres 映像能够再次在 Ubuntu 系统上成功运行?

完整的错误:

postgresql_1  | nami    INFO  Initializing postgresql
postgresql_1  | postgre INFO  ==> No injected postgresql.conf file found. 
Creating default postgresql.conf file...
postgresql_1  | postgre INFO  ==> …
Run Code Online (Sandbox Code Playgroud)

postgresql docker docker-compose

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

Django:使用 GET 而不是 PATCH 更新特定字段

语境

对于特定用例,我需要能够Visitor使用 GET 请求而不是 PATCH 请求更新模型的单个字段。

我的相关访客模型如下所示:

# models.py

class Visitor(models.Model):
    visitor_uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, db_index=True)
    customers = models.ForeignKey(Customer, on_delete=models.CASCADE, related_name='customer_visitors')
    audiences = models.ManyToManyField(Audience, related_name='audience_visitors')
    cid = models.CharField(max_length=255, unique=True)
    uid = models.CharField(max_length=255)
    cup = JSONField(null=True)

    def __str__(self):
        return self.cid

    class Meta:
        db_table = 'visitor'
Run Code Online (Sandbox Code Playgroud)

我正在使用这样一个简单的序列化程序:

# serializers.py

class VisitorSerializer(serializers.ModelSerializer):
    class Meta:
        model = Visitor
        fields = ('customers', 'cid', 'uid', 'cup')
Run Code Online (Sandbox Code Playgroud)

我可以只更新cup特定字段的字段,该字段Visitor是使用cid带有 PATCH的唯一字段查找的,如下所示:

# views.py

class VisitorViewSet(viewsets.ModelViewSet):
    serializer_class = VisitorSerializer
    queryset = …
Run Code Online (Sandbox Code Playgroud)

python django django-rest-framework

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

如何在 Firefox 或 Chrome 中使用 Selenium webdriver 更改屏幕截图的目标目录

我想使用Selenium webdriver 和 Python制作网页的屏幕截图并将其保存在自定义位置。我尝试使用 Firefox 和 Chrome 将屏幕截图保存到自定义位置,但它始终将屏幕截图保存在项目目录中。这是我的 Firefox 版本:

from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary

profile = webdriver.FirefoxProfile()
profile.set_preference("browser.download.folderList", 2)
profile.set_preference("browser.download.dir", 
'C:\\Users\\User\\WebstormProjects')
binary = FirefoxBinary("C:\\Program Files\\Mozilla Firefox\\firefox.exe")


def foxScreen():
    driver = webdriver.Firefox(firefox_binary=binary, 
    firefox_profile=profile)
    driver.get("http://google.com")
    driver.save_screenshot("foxScreen.png")
    driver.quit()


if __name__ == '__main__':
    foxScreen()
Run Code Online (Sandbox Code Playgroud)

这是我的 Chrome 版本:

from selenium import webdriver

options = webdriver.ChromeOptions()
prefs = {"download.default_directory": r'C:\\Users\\User\\WebstormProjects',
         "directory_upgrade": True}
options.add_experimental_option("prefs", prefs)
chromedriver = 
"C:\\Users\\User\\Downloads\\chromedriver_win32\\chromedriver.exe"


def chromeScreen():
    driver = webdriver.Chrome(chrome_options=options, 
                              executable_path=chromedriver)
    driver.get("http://google.com")
    driver.save_screenshot("chromeScreen.png")
    driver.quit()


if __name__ …
Run Code Online (Sandbox Code Playgroud)

python selenium webdriver selenium-chromedriver selenium-webdriver

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