标签: django-admin

如何配置 Django 以在启动时重新初始化并填充整个数据库?

假设您正在使用新 Django 应用程序的第一个版本,并且不断添加更改模型。

作为数据驱动的应用程序,您主要致力于自定义 django 管理。

在这种情况下syncdb不太有用,因为它将无法更新模型。South很有趣,但是当您在第一个版本中工作时,它没有太大意义。

删除数据库并重新初始化它需要几个命令,并且您还需要手动输入新的管理员帐户。

您建议如何设置您的开发环境,以便您可以:

  • 文件更改时自动重启 django 服务器
  • django 重新启动时自动重新初始化数据库

因此,我希望能够向模型添加新属性、切换到浏览器并刷新管理页面并查看新属性。

database django django-admin django-database

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

django 管理员使用外键过滤器覆盖 change_view

在我的 django ModelAdmin 中,我想根据当前用户的组过滤外键选择,并且我想以添加和更改形式实现它。我使用以下代码在添加视图中实现了它。

添加视图

def add_view(self, request, form_url = '', extra_context = None):
    service_sector = common.getServiceSector(request.user)
    ModelForm = self.get_form(request)
    if request.POST:
        form = ModelForm(request.POST, request.FILES)
    else:
        form = ModelForm()
    if service_sector:
        qs = form['member'].field.queryset
        qs = qs.filter(service_sector = service_sector)
        form['member'].field.queryset = qs
    adminForm = helpers.AdminForm(form, list(self.get_fieldsets(request)),
    self.prepopulated_fields, self.get_readonly_fields(request),
    model_admin=self)
    context = {
    'adminform': adminForm,
    'is_popup': "_popup" in request.REQUEST,
    'show_delete': False,
    'root_path': self.admin_site.root_path,
    }
    context.update(extra_context or {})
    return self.render_change_form(request, context, form_url=form_url, add=True)
Run Code Online (Sandbox Code Playgroud)

这里工作正常。在这个模型中,我有一个唯一的字段电子邮件,这导致了 change_view 中的问题。我在下面给出了我的 change_view …

django django-admin

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

上传到 Django 表单时验证文件内容

我正在尝试验证上传到 Django Admin 的 CSV 文件 - 以确保它的格式正确等等。

它还依赖于表单中的另一个值,所以我在 formsclean方法中验证它:

def clean(self):
    cleaned_data = super(CSVInlineForm, self).clean()
    csv_file = cleaned_data.get('csv_file')
    contents = csv_file.read()
    # ...validate contents here...
    return cleaned_data
Run Code Online (Sandbox Code Playgroud)

我的模型保存方法如下所示:

def save(self, *args, **kwargs):
    contents = self.csv_file.read()
    # ... do something with the contents here ...
    return super(CSVModel, self).save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

当我读取 clean 方法中的文件内容时,问题就出现了,我无法读取模型 save 方法中的 csv_file (它返回一个空字符串)。在 clean 方法中,我可以读取和解析文件。

该文件上传完美无缺。

如果我在 clean 方法中注释掉 csv_file.read() 行,则 save 方法可以正常工作并且可以读取文件内容。

它的行为好像文件只能读取一次?

如果我重新保存模型,文件读取和解析工作正常。

这一切都在 django admin 中——据我所知,表单正在被正确处理。

django django-admin

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

在Django模型中覆盖clean方法会破坏其他验证吗?

假设我有一个简单的模型,models.py可以通过Django Admin编辑:

class Range(models.Model):
    gt = models.IntegerField('Greater than')
    lt = models.IntegerField('Lesser than')

    def clean(self):
        if self.gt >= self.lt:
            raise ValidationError('Incorrect range')
Run Code Online (Sandbox Code Playgroud)

问题:尽管以上代码在确保gt小于的假设方面做得很好lt,但是它也破坏了Django提供的其他基本验证。例如,如果我在Django admin中为这些字段输入了一些非数字数据,则会看到跨越多个屏幕的调试消息:

在此处输入图片说明

如果我clean(self)从的定义中删除了覆盖的方法Range,则此基本验证将再次开始正常工作:

在此处输入图片说明

但当然,现在我可以进入Range以s gt大于lt

我真的不知道我在做什么错,因为我只是按照https://docs.djangoproject.com/zh-CN/1.9/ref/models/instances/#validating-objects遵循Django文档

我的错误在哪里?如何正确地为我的表格提供验证?

django validation django-models django-admin

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

模型中描述的属性的详细名称

如何设置verbose_name@property,这是我在模型中描述的那样,这样我就可以在Django管理看到不同的字段名称(如"子类别")?

@property
def category_name(self):
    return self.category.name
Run Code Online (Sandbox Code Playgroud)

我试图在方法中设置Meta short_description和详细名称 - 它不起作用.

django django-models django-admin

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

运行make migrations时出现Django关系错误

嘿我正在尝试初始化一个新数据库,但我遇到了一些设置迁移的问题.我得到的错误似乎源于设置我的表单.在我正在使用的表单中,我正在创建一个选择字段:

from django import forms
from ..custom_admin import widgets, choices


class MemberForm(forms.Form):
    provinces = forms.ChoiceField(label='Provinces', choices=choices.PROVINCE_CHOICES, required=True)
Run Code Online (Sandbox Code Playgroud)

PROVINCE_CHOICES来自这里:

from ..base.models import ProvinceCode

PROVINCE_CHOICES = []
for province in ProvinceCode.objects.filter(country_code_id=1).order_by('code'):
    PROVINCE_CHOICES.append((province.code, province.code))
Run Code Online (Sandbox Code Playgroud)

问题似乎是在迁移发生之前调用了这个循环,给出了一个错误,指出省模型不存在.注释掉对该文件的引用允许迁移工作,但这似乎是继续使用的不切实际的解决方案.有没有办法解决这个错误?

作为参考,这是我运行时得到的错误manage.py makemigrations:

./manage.py makemigrations        
Traceback (most recent call last):
  File "/Users/js/Documents/VirtualEnvironments/pcenv/lib/python3.5/site-packages/django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
psycopg2.ProgrammingError: relation "pc_psr_code" does not exist
LINE 1: ...escription", "pc_psr_code"."country_code_id" FROM "pc_psr_co...
                                                             ^


The above exception was the direct cause of the following exception:

Traceback (most recent call …
Run Code Online (Sandbox Code Playgroud)

python django django-forms django-admin django-migrations

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

Django-将图像添加到Django管理列表中显示

请帮我。我放弃。我正在尝试向django管理员添加其他字段。我想在那儿插入图像缩略图。这是我的admin.py的一部分:

class SiteAdmin(admin.ModelAdmin):
    list_display = ('is_active', 'name', 'description', 'keywords', 'date')
    fields = ('name', 'url', 'category', 'subcategory', 'category1',
          'subcategory1', 'description',
          'keywords', 'date', 'group', 'email', 'is_active')
    readonly_fields = ('date',)
    list_display_links = ('name',)
    list_filter = ('is_active',)
    actions = [activate_sites, deactivate_sites]
Run Code Online (Sandbox Code Playgroud)

我很想将'image'添加到list_display。图像由thumbalizr生成。我在models.py中有一个方法:

class Site(models.Model):
    category = models.ForeignKey('Category')
    subcategory = ChainedForeignKey(
        'SubCategory',
        chained_field='category',
        chained_model_field='category',
        show_all=False,
        auto_choose=True,
        blank=True, null=True, default=None)
    name = models.CharField(max_length=70, verbose_name="Tytu?")
    description = models.TextField(verbose_name="Opis")
    keywords = MyTextField(max_length=100, verbose_name="S?owa kluczowe")
    date = models.DateTimeField(default=datetime.now, editable=False)
    url = models.URLField()
    is_active = models.BooleanField(default=False)

    category1 = models.ForeignKey('Category', related_name='category', …
Run Code Online (Sandbox Code Playgroud)

django django-admin

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

管理员中的Django模型pre_save验证

以下是我的模型:

class Product(models.Model):
    product_title = models.CharField(max_length=100, null=False, 
verbose_name='Product title')
    product_description = models.TextField(max_length=250, 
verbose_name='Product description')
    product_qty = models.IntegerField(verbose_name='Quantity')
    product_mrp = models.FloatField(verbose_name='Maximum retail price')
    product_offer_price = models.FloatField(verbose_name='Selling price')

def validate_produce_offer_price(sender, instance, **kwargs):
    if instance.product_offer_price > instance.product_mrp:
        from django.core.exceptions import ValidationError
        raise ValidationError('Product offer price cannot be greater than 
Product MRP.')


pre_save.connect(validate_produce_offer_price, sender=Product)
Run Code Online (Sandbox Code Playgroud)

我想在保存模型之前验证product_offer_price.验证错误正在成功引发,但是在调试器创建的异常页面上.如何在管理员本身的表单上显示错误,就像管理表单提出的其他错误一样?

在更改现有数据期间引发的异常 添加新数据时引发异常

django django-models django-admin

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

使用Docker和Django公开端口8000

我正在尝试django image在这里找到我的副本:https : //hub.docker.com/r/library/django

好吧,在这一点上图像运行良好,但是我正在尝试从该容器生成一个容器。

好用的命令:

$ docker ps -a
CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS                      PORTS               NAMES
3c3e94ff32e7        django:latest          "python3"                18 hours ago        Exited (137) 17 hours ago                       django

$ docker images -a
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
django              latest              eb40dcf64078        9 months ago        436MB
Run Code Online (Sandbox Code Playgroud)

使用方法:

$ docker commit django fmf
$ docker run -p 8000:8000 -td fmf /bin/bash
Run Code Online (Sandbox Code Playgroud)

现在,我有了容器,fmf并使用以下命令生成了一个新的django项目:

# django-admin startproject test
# python manage.py runserver 8000
Run Code Online (Sandbox Code Playgroud)

但是,此端口未打开(或者至少我看不到那里的任何响应)。我不确定端口是否未打开并使用网桥,但是此容器没有响应。

我做错了什么?

django django-admin docker

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

Django迁移错误:错误:'选项'必须是可迭代的(例如,列表或元组)

我已经为博客应用程序创建了模型.这是我的models.py:

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
# Create your models here.
class post(models.Model):
    STATUS_CHOICE=(
        ('draft','DRAFT'),
        ('published','Published'),
    )

    title=models.CharField(max_length=250)
    slug=models.SlugField(max_length = 250,unique_for_date='publish')
    author=models.ForeignKey(User,related_name='blog_posts')
    body=models.TextField()
    publish=models.DateTimeField(default=timezone.now)
    created = models.DateTimeField(auto_now_add=True)
    updated=models.DateTimeField(auto_now=True)
    status = models.CharField(max_length=10,
                                choices = 'STATUS_CHOICES',
                                    default='draft')
    class Meta:
        ordering = ('-publish',)
    def __str__(self):
        return self.title
Run Code Online (Sandbox Code Playgroud)

当我尝试迁移模型时,我收到错误:

ERRORS:
myblog.post.status: (fields.E004) 'choices' must be an iterable (e.g., a list or tuple).
Run Code Online (Sandbox Code Playgroud)

这是我的admin.py文件:

from django.contrib import admin
from .models import post

# Register your models here.
admin.site.register(post) …
Run Code Online (Sandbox Code Playgroud)

python django django-models django-admin django-migrations

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