小编Mon*_*lik的帖子

Django中的复杂形式 - 我应该看看哪些应用程序和Django/Python功能?

我的项目中有很多复杂的表单,我一直觉得我可以更优雅,更简单地编写它们.所以我的问题是什么是一些可能对我有帮助的优秀应用和实践?具体来说,我正在考虑我需要做的事情:

  • 通过一个表单编辑/添加多个对象(例如:假设我有一个伙伴关系模型和一个人员模型 - 每个伙伴关系对象都与两个人有关.现在我想说我想编辑伙伴关系和伙伴关系中的两个人同时.)
  • 处理多对多关系 - 特别是那些有额外数据关联的关系
  • "类似向导"的表单(因为有几页/步骤,用户必须在将任何内容保存到数据库之前完成所有这些操作)
  • 根据数据库中的内容给出了写入表单字段的建议(我猜这真的是一个AJAX问题,但我对是否有一些django应用程序以某种方式简化这个问题感兴趣)

任何其他更复杂的表单方案的解决方案也欢迎.以上是我已经遇到的问题,但我想一般了解一下表格的最佳实践.

django django-forms

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

Django:覆盖表单中的clean()方法 - 关于引发错误的问题

我一直在干净的方法中做这样的事情:

if self.cleaned_data['type'].organized_by != self.cleaned_data['organized_by']:
      raise forms.ValidationError('The type and organization do not match.')
if self.cleaned_data['start'] > self.cleaned_data['end']:
      raise forms.ValidationError('The start date cannot be later than the end date.')
Run Code Online (Sandbox Code Playgroud)

但那意味着表单一次只能引发其中一个错误.表单有没有办法提出这两个错误?

编辑#1:上述任何解决方案都很棒,但是会喜欢在以下情况下也可以使用的方法:

if self.cleaned_data['type'].organized_by != self.cleaned_data['organized_by']:
      raise forms.ValidationError('The type and organization do not match.')
if self.cleaned_data['start'] > self.cleaned_data['end']:
      raise forms.ValidationError('The start date cannot be later than the end date.')
super(FooAddForm, self).clean()
Run Code Online (Sandbox Code Playgroud)

其中FooAddForm是ModelForm并且具有可能也会导致错误的唯一约束.如果有人知道这样的事情那会很棒......

django django-forms django-validation

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

Django:有没有办法在与包含ManyToManyField的模型不同的应用程序中的ManyToManyField中使用"直通"模型?

可以说我有两个django应用程序:

  • 比赛 - 将处理比赛数据
  • 条目 - 将处理与参赛者进入比赛相关的功能

在竞赛应用程序中,我有一个代表竞赛部分的模型:

class Division(models.Model):
    competition = models.ForeignKey(Competition)
    discipline = models.CharField(max_length=1, choices=DISCIPLINE_CHOICES)
    age_group = models.ForeignKey(AgeGroup)
    participants = models.ManyToManyField(Competitor, through='Entry')
Run Code Online (Sandbox Code Playgroud)

我想把Entry模型放在条目应用程序中:

class Entry(models.Model):
    division = models.ForeignKey('Division')
    competitor = models.ForeignKey(Competitor)
    withdrawn = models.BooleanField(default=False)
Run Code Online (Sandbox Code Playgroud)

如何解决from ... import ...语句,以便它们有效?当我输入import语句时,例如from entries.models import Entry我从syncdb忽略这些应用程序的模型(因为导入是循环的)或当我删除其中一个或两个时,我得到验证错误:

错误:一个或多个模型没有验证:entries.entry:'division'与模型Division有关系,它没有安装或者是抽象的.competitions.division:'参与者'通过模型Entry指定m2m关系,该关系尚未安装

我理解为什么会发生这种情况,但我不知道如何更改它,以便它可以工作(不需要将Entry模型移动到竞赛应用程序中,我真的不想这样做).

python django django-models manytomanyfield django-apps

8
推荐指数
2
解决办法
4429
查看次数

Virtualenv:全局站点包与虚拟环境中的站点包

  1. 如果我在全局站点包和本地站点中都安装了某个包,那么将导入哪个包?这会工作还是会出错?
  2. 我应该在全球网站包中放置哪些包,哪些包放在本地包中?

python virtualenv

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

Django TemplateSyntaxError:当前事务被中止,这个异常是什么意思?postgresql 8.4与django一起工作正常吗?

错误的全文是:

在/的TemplateSyntaxError

渲染时捕获异常:当前事务被中止,命令被忽略直到事务块结束

我最近重新安装了计算机上的所有软件.以前用过的代码没问题.它在朋友的计算机和开发服务器上仍然没有问题.

我唯一能想到的,可能已经改变的是postgresql服务器版本(我实际上并不确定我是否尝试在我的旧安装上运行8.4或者没有 - 它绝对适用于8.3).有人能够确认Django有postgresql 8.4的问题和/或有任何提示,为什么我有这些错误?

编辑1

为了回应Dominic ......这不仅仅发生在一个页面或一个标签上(虽然有些页面似乎没问题).导致错误的标签和变量的唯一共同点是它们碰巧在途中的某个地方访问数据库(尽管并非所有访问数据库的标签都会导致错误).此外,相同的代码不会在其他计算机上创建TemplateSyntaxError.

如果我删除了发生错误的变量或自定义模板标记,那么这就是发生的事件链:

  1. 我删除了导致错误并刷新页面的变量或标记.
  2. Django选择一个不同的变量或标签,并发生相同的错误,所以我一直删除它们.
  3. 一旦导致错误的所有变量和标签被删除,我就会停止获得正确的错误页面.我得到一个纯白页,其中包含以下回溯:
Traceback (most recent call last):

  File "/usr/lib/python2.6/site-packages/django/core/servers/basehttp.py", line 279, in run
    self.result = application(self.environ, self.start_response)

  File "/usr/lib/python2.6/site-packages/django/core/servers/basehttp.py", line 651, in __call__
    return self.application(environ, start_response)

  File "/usr/lib/python2.6/site-packages/django/core/handlers/wsgi.py", line 245, in __call__
    response = middleware_method(request, response)

  File "/usr/lib/python2.6/site-packages/debug_toolbar/middleware.py", line 90, in process_response
    response.content = replace_insensitive(smart_unicode(response.content), u'', smart_unicode(self.debug_toolbars[request].render_toolbar() + u''))

  File "/usr/lib/python2.6/site-packages/debug_toolbar/toolbar/loader.py", line 72, in render_toolbar
    'BASE_URL': self.request.META.get('SCRIPT_NAME', ''),

  File "/usr/lib/python2.6/site-packages/django/template/loader.py", line 108, in render_to_string
    return t.render(context_instance)

  File …

python django postgresql

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

Django Admin:自定义内联模板(tabular.html)

我正在尝试遵循此答案中的准则,但是我对如何编辑模板一无所知。

我的admin.py的相关部分:

SegmentFormset = forms.models.inlineformset_factory(Division,Segment)
class DivisionForm(forms.ModelForm):
    def __init__(self, **kwargs):
        super(DivisionForm, self).__init__(**kwargs)
        self.segment_formset = SegmentFormset(instance=self.instance, data=self.data,
                prefix=self.prefix)

    def is_valid(self):
        return (super(DivisionForm, self).is_valid() and 
                    self.segment_formset.is_valid())

    def save(self, commit=True):
        assert commit == True 
        res = super(DivisionForm, self).save(commit=commit)
        self.segment_formset.save()
        return res

class DivisionInline(admin.TabularInline):
    model = Division
    form = DivisionForm
    template = 'competitions/admin/tabular.html'

class CompetitionAdmin(VersionAdmin):
    inlines = [DivisionInline,]
Run Code Online (Sandbox Code Playgroud)

模板的相关部分:

    {% for fieldset in inline_admin_form %}
      {% for line in fieldset %}
        {% for field in line %}
          <td …
Run Code Online (Sandbox Code Playgroud)

django django-templates django-forms django-admin

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

为什么Django管理员尝试将字符串编码为ASCII而不是Unicode?或者这个错误是否与它看起来不同?

我有以下错误:

/ admin/results_cop/copsegmentresult上的TemplateSyntaxError /

在渲染时抓住异常:('ascii','ISU欧洲花样滑冰锦标赛2009:高级女士们:短节目 - 2. Susanna P\xc3\x96YKI\xc3\x96',98,99,'序数不在范围内( 128)')

不呈现的字符串片段是:PÖYKIÖ

我没有得到的是为什么Django试图将字符串呈现为ASCII,为什么不是UTF-8?

编辑1:

我忘了问 - 我也很想知道如何摆脱错误;)

编辑2:

Bobince的答案是正确的:)我有类似的东西:

def __unicode__(self):
    return "%s %s" (self.foo, self.bar)
Run Code Online (Sandbox Code Playgroud)

python django unicode encoding django-admin

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

Python:os.execl() - 它究竟做了什么?为什么我收到此错误?

我在使用virtualenv在passenger_wsgi模块上部署Django时遇到了一些麻烦.passenger_wsgi.py文件中的Python代码应该解决我的问题:

import os, sys
INTERP = '/home/login/.virtualenvs/env_name/bin/python'
if sys.executable != INTERP:
    os.execl(INTERP, INTERP, *sys.argv)
Run Code Online (Sandbox Code Playgroud)

我理解的前三行,但我对第四行只有一个含糊不清的想法,那就是碰巧给我一个错误:

/home/login/.virtualenvs/env_name/bin/python: can't find '__main__.py' in ''

那么os.execl到底在做什么呢?那个错误信息意味着什么?

python virtualenv os.execl

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