Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python IntegrityError:列中的值为空。。Django测试保存方法悖论_Python_Django_Django Models_Error Handling_Save - Fatal编程技术网

Python IntegrityError:列中的值为空。。Django测试保存方法悖论

Python IntegrityError:列中的值为空。。Django测试保存方法悖论,python,django,django-models,error-handling,save,Python,Django,Django Models,Error Handling,Save,我正在为一个允许用户上传文件的视图编写一个附加内容,当我使用runserver对其进行测试时,它可以在中完美地工作。然而,当我使用Django测试用例时,“created_at”列中的IntegrityError:null值违反了非空约束,其中created_at是一个日期时间字段 class Proposal(IsPrimeMixin, PSortMixin, models.Model): number = models.OneToOneField(ProjectNumber, on_

我正在为一个允许用户上传文件的视图编写一个附加内容,当我使用
runserver
对其进行测试时,它可以在中完美地工作。然而,当我使用Django测试用例时,“created_at”列中的
IntegrityError:null值违反了非空约束
,其中
created_at
是一个日期时间字段

class Proposal(IsPrimeMixin, PSortMixin, models.Model):
    number = models.OneToOneField(ProjectNumber, on_delete=models.CASCADE, primary_key=True)
    created_at = models.DateTimeField(auto_now_add=True)
    ...
矛盾之处在于,引发
IntegrityError
错误的地方是父保存方法

...
File "/Users/feldman/workspace/intranet/proposals/models.py", line 329, in save
    super(Proposal, self).save(*args, **kwargs)
...
但是,此字段应为空,因为
auto\u now
字段是在
pre\u save
中设置的。当我使用
runserver
时会重复这一点<在处创建的code>self.created_在第329行调用父保存方法之前为空。只有在这之后,它才有一个值

> /Users/feldman/workspace/intranet/proposals/models.py(329)save()
(Pdb) self.created_at
(Pdb) next
> /Users/feldman/workspace/intranet/proposals/models.py(330)save()
-> next_number.assigned_at = timezone.now()
(Pdb) next
> /Users/feldman/workspace/intranet/proposals/models.py(331)save()
-> next_number.save()
(Pdb) self.created_at
datetime.datetime(2017, 4, 26, 18, 45, 40, 65870, tzinfo=<UTC>)
模型保存方法的相关部分

def save(self, *args, **kwargs):
    log_entry = kwargs.pop('log_entry', True)
    if self.pk is None:
        next_number = ProjectNumber.objects.next_number()
        self.number = next_number
        super(Proposal, self).save(*args, **kwargs)   # line 329
和回溯

Internal Server Error: /proposals/new
Traceback (most recent call last):
  File "/Users/feldman/.virtualenvs/intranettwopointoh/lib/python2.7/site-packages/django/core/handlers/exception.py", line 42, in inner
    response = get_response(request)
  File "/Users/feldman/.virtualenvs/intranettwopointoh/lib/python2.7/site-packages/django/core/handlers/base.py", line 187, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/Users/feldman/.virtualenvs/intranettwopointoh/lib/python2.7/site-packages/django/core/handlers/base.py", line 185, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/Users/feldman/.virtualenvs/intranettwopointoh/lib/python2.7/site-packages/django/contrib/auth/decorators.py", line 23, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "/Users/feldman/workspace/intranet/proposals/views.py", line 66, in proposal_new
    proposal.save()
  File "/Users/feldman/workspace/intranet/proposals/models.py", line 329, in save
    super(Proposal, self).save(*args, **kwargs)
  File "/Users/feldman/.virtualenvs/intranettwopointoh/lib/python2.7/site-packages/django/db/models/base.py", line 796, in save
    force_update=force_update, update_fields=update_fields)
  File "/Users/feldman/.virtualenvs/intranettwopointoh/lib/python2.7/site-packages/django/db/models/base.py", line 824, in save_base
    updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
  File "/Users/feldman/.virtualenvs/intranettwopointoh/lib/python2.7/site-packages/django/db/models/base.py", line 889, in _save_table
    forced_update)
  File "/Users/feldman/.virtualenvs/intranettwopointoh/lib/python2.7/site-packages/django/db/models/base.py", line 939, in _do_update
    return filtered._update(values) > 0
  File "/Users/feldman/.virtualenvs/intranettwopointoh/lib/python2.7/site-packages/django/db/models/query.py", line 654, in _update
    return query.get_compiler(self.db).execute_sql(CURSOR)
  File "/Users/feldman/.virtualenvs/intranettwopointoh/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 1148, in execute_sql
    cursor = super(SQLUpdateCompiler, self).execute_sql(result_type)
  File "/Users/feldman/.virtualenvs/intranettwopointoh/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 835, in execute_sql
    cursor.execute(sql, params)
  File "/Users/feldman/.virtualenvs/intranettwopointoh/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
  File "/Users/feldman/.virtualenvs/intranettwopointoh/lib/python2.7/site-packages/django/db/utils.py", line 94, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "/Users/feldman/.virtualenvs/intranettwopointoh/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
IntegrityError: null value in column "created_at" violates not-null constraint
DETAIL:  Failing row contains (456, null, 2017-04-26 18:59:03.693245+00, Test Case, , null, open, SO, f, PU, null, null, , f, f, f, f, f, f, f, high, 2, null, null, null, null, null, Test City, null, 456.
景色 表单工厂(其中,AForm、BForm、CForm和DForm只是
排除
字段集
的不同组合)


我们很乐意提供更多需要的信息

这是一个很好的描述。您还可以粘贴查看功能吗?特别是
proposal\u new
功能。能否粘贴
表单中的内容。proposal\u new\u form\u factory
?抱歉,我知道您已经尝试过自己使用
Pdb
调试此问题,但我认为答案在于跟踪我们从错误位置返回的步骤。@kiran.koduru我很高兴发布您可以加入的内容?我想这将是一个很长的对话。这是一个很好的描述。您还可以粘贴查看功能吗?特别是
proposal\u new
功能。能否粘贴
表单中的内容。proposal\u new\u form\u factory
?抱歉,我知道您已经尝试过自己使用
Pdb
调试此问题,但我认为答案在于跟踪我们从错误位置返回的步骤。@kiran.koduru我很高兴发布您可以加入的内容?我想这将是一次很长的谈话。
Internal Server Error: /proposals/new
Traceback (most recent call last):
  File "/Users/feldman/.virtualenvs/intranettwopointoh/lib/python2.7/site-packages/django/core/handlers/exception.py", line 42, in inner
    response = get_response(request)
  File "/Users/feldman/.virtualenvs/intranettwopointoh/lib/python2.7/site-packages/django/core/handlers/base.py", line 187, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/Users/feldman/.virtualenvs/intranettwopointoh/lib/python2.7/site-packages/django/core/handlers/base.py", line 185, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/Users/feldman/.virtualenvs/intranettwopointoh/lib/python2.7/site-packages/django/contrib/auth/decorators.py", line 23, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "/Users/feldman/workspace/intranet/proposals/views.py", line 66, in proposal_new
    proposal.save()
  File "/Users/feldman/workspace/intranet/proposals/models.py", line 329, in save
    super(Proposal, self).save(*args, **kwargs)
  File "/Users/feldman/.virtualenvs/intranettwopointoh/lib/python2.7/site-packages/django/db/models/base.py", line 796, in save
    force_update=force_update, update_fields=update_fields)
  File "/Users/feldman/.virtualenvs/intranettwopointoh/lib/python2.7/site-packages/django/db/models/base.py", line 824, in save_base
    updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
  File "/Users/feldman/.virtualenvs/intranettwopointoh/lib/python2.7/site-packages/django/db/models/base.py", line 889, in _save_table
    forced_update)
  File "/Users/feldman/.virtualenvs/intranettwopointoh/lib/python2.7/site-packages/django/db/models/base.py", line 939, in _do_update
    return filtered._update(values) > 0
  File "/Users/feldman/.virtualenvs/intranettwopointoh/lib/python2.7/site-packages/django/db/models/query.py", line 654, in _update
    return query.get_compiler(self.db).execute_sql(CURSOR)
  File "/Users/feldman/.virtualenvs/intranettwopointoh/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 1148, in execute_sql
    cursor = super(SQLUpdateCompiler, self).execute_sql(result_type)
  File "/Users/feldman/.virtualenvs/intranettwopointoh/lib/python2.7/site-packages/django/db/models/sql/compiler.py", line 835, in execute_sql
    cursor.execute(sql, params)
  File "/Users/feldman/.virtualenvs/intranettwopointoh/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
  File "/Users/feldman/.virtualenvs/intranettwopointoh/lib/python2.7/site-packages/django/db/utils.py", line 94, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "/Users/feldman/.virtualenvs/intranettwopointoh/lib/python2.7/site-packages/django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
IntegrityError: null value in column "created_at" violates not-null constraint
DETAIL:  Failing row contains (456, null, 2017-04-26 18:59:03.693245+00, Test Case, , null, open, SO, f, PU, null, null, , f, f, f, f, f, f, f, high, 2, null, null, null, null, null, Test City, null, 456.
@login_required
def proposal_new(request):
    recent_conflict_checks = None
    conflict_check = None
    has_proposal = False
    existing_proposals = None
    if request.method == 'POST':
        go_no_go = True
        prime = True
        if 'cancel' in request.POST:
            return HttpResponseRedirect(reverse('projects:list'))
        if 'conflict_check' in request.POST:
            try:
                conflict_check = ConflictCheck.objects.get(pk=int(request.POST['conflict_check']))
            except ValueError:
                pass
            else:
                go_no_go = conflict_check.is_go_no_go
                prime = conflict_check.is_prime
        form = forms.proposal_new_form_factory(request.POST, go_no_go=go_no_go, prime=prime)
        pdform = forms.ProposalDocumentForm(request.POST, request.FILES, prefix='proposal_docs')
        if form.is_valid() and pdform.is_valid():
            proposal = form.save(commit=False)
            proposal.created_by = request.user.employee
            try:
                proposal.save()  # line 66
            except NoProjectNumbers:
                messages.error(request, 'No project numbers remain in the database, please contact an administrator.')
            else:
                ...
def choose_base_class(go_no_go, prime):
    if go_no_go and prime:
        return AForm
    elif go_no_go and not prime:
        return BForm
    elif not go_no_go and prime:
        return CForm
    elif not go_no_go and not prime:
        return DForm
    else:
        raise ValueError('How did this happen...')

def proposal_new_form_factory(*args, **kwargs):
    go_no_go = kwargs.get('go_no_go', True)
    prime = kwargs.get('prime', True)
    base_class = choose_base_class(go_no_go, prime)

    class ProposalNewForm(base_class):

        class Meta(base_class.Meta):
        # Add status to exclude
            base_class.Meta.exclude.append('status')
            # Add description for demographics and marketing fieldset
            fieldsets = deepcopy(base_class.Meta.fieldsets)
            marketing_fieldset = filter(lambda x: x[0] == 'Demographics and Marketing', fieldsets)[0]
            marketing_index = fieldsets.index(marketing_fieldset)
            fieldsets[marketing_index][1]['description'] = ('Either city or state is required for a new proposal.')

    return ProposalNewForm(*args, **kwargs)