Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.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 Django 2.1.1,IntegrityError,非空约束失败:papers\u paper.seminary\u id_Python_Django_Null_Constraints - Fatal编程技术网

Python Django 2.1.1,IntegrityError,非空约束失败:papers\u paper.seminary\u id

Python Django 2.1.1,IntegrityError,非空约束失败:papers\u paper.seminary\u id,python,django,null,constraints,Python,Django,Null,Constraints,Python版本:3.7 Django版本2.1.1 我是django的新手,我主要通过教程和“试错法”自学。我已经搜索了stackoverflow,但前面的问题似乎都不适合我的问题。例如,它们指的是空白字符域,我认为这不是我的问题 我想,我通过外键把这两门课神学院和论文联系起来了。 现在,我可以通过适当的表单将神学院添加到数据库中,并以我想要的方式显示它。 但是第二种形式考虑到了类论文,django给了我一个错误: 申请方式:邮寄 异常类型:IntegrityError 异常值:非空约束失败:

Python版本:3.7 Django版本2.1.1

我是django的新手,我主要通过教程和“试错法”自学。我已经搜索了stackoverflow,但前面的问题似乎都不适合我的问题。例如,它们指的是空白字符域,我认为这不是我的问题

我想,我通过外键把这两门课神学院论文联系起来了。 现在,我可以通过适当的表单将神学院添加到数据库中,并以我想要的方式显示它。 但是第二种形式考虑到了类论文,django给了我一个错误:

申请方式:邮寄

异常类型:IntegrityError

异常值:非空约束失败:论文\论文.神学院\ id

论文是我的应用程序,顺便说一句

这是models.py,不带meta:

class Seminary(models.Model):
slug = models.SlugField(unique=True)
seminary_type = models.CharField(max_length=25, choices=choices.SEMINARY_TYPE_CHOICES)
seminary_title = models.CharField(max_length=200)
seminary_year = models.IntegerField(choices=choices.YEAR_CHOICES, default=datetime.now().year)
summer_winter = models.CharField(max_length=6, choices=choices.SEASON_CHOICES, default="S")

def get_absolute_url(self):
    return reverse('papers:paper-detail', kwargs={'slug': self.slug})

def __str__(self):
    return self.seminary_title


def create_slug(instance, new_slug=None):
    slug = slugify(instance.seminary_title)
    if new_slug is not None:
        slug = new_slug
    qs = Seminary.objects.filter(slug=slug)
    exists = qs.exists()
    if exists:
        new_slug = "%s-%s" % (slug, qs.first().pk)
        return create_slug(instance, new_slug=new_slug)
    return slug


def pre_save_post_receiver(sender, instance, *args, **kwargs):
    if not instance.slug:
        instance.slug = create_slug(instance)


pre_save.connect(pre_save_post_receiver, sender=Seminary)


class Paper(models.Model):
    seminary = models.ForeignKey(Seminary, on_delete=models.CASCADE, primary_key=True)
    paper_title = models.CharField(max_length=200, blank=False, help_text="Please enter the title ")
    author = models.CharField(max_length=50, blank=True)
    upload_paper = ContentTypeRestrictedFileField(
        upload_to='papers/pdf',
        content_types=['application/pdf'],
        max_upload_size=5242880,
        blank=True
    )

    def get_absolute_url(self):
        return reverse('papers:paper-index', kwargs={'slug': self.slug})
这里是views.py:

class IndexView(generic.ListView):
    template_name = 'papers/index.html'
    context_object_name = 'all_papers'

    def get_queryset(self):
        return Seminary.objects.all()


class DetailView(generic.DetailView):
    model = Seminary
    template_name = 'papers/detail.html'


class SeminaryCreate(CreateView):
    model = Seminary
    fields = ['summer_winter',
              'seminary_year',
              'seminary_type',
              'seminary_title',
              ]


class PaperCreate(CreateView):
    model = Paper
    fields = [
        'paper_title',
        'author',
        'upload_paper',
    ]
我肯定,我把一些东西弄混了。如果有更多信息需要我提供,请询问,我会将其添加到我的问题中。 提前谢谢

编辑:

我按照@bluegrounds的建议,将神学院添加到视图PaperCreate 现在它给出了以下错误

异常类型:配置不正确

异常值:没有要重定向到的URL。提供url或 在模型上定义get_absolute_url方法

无论如何,研讨会不应该有选择:几篇论文只分配给一个特定的研讨会

更改视图后,完成回溯创建文件:

Request Method: POST
Request URL: http://127.0.0.1:8000/papers/seminartitel15/add/

Django Version: 2.1.1
Python Version: 3.7.0
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'transcript.apps.TranscriptConfig',
 'biblio.apps.BiblioConfig',
 'papers.apps.PapersConfig',
 'crispy_forms']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback:

File "/usr/lib/python3.7/site-packages/django/views/generic/edit.py" in get_success_url
  116.                 url = self.object.get_absolute_url()

File "/home/bjoern/MyCode/PycharmProjects/websiteTwo/websiteTwo/papers/models.py" in get_absolute_url
  68.         return reverse('papers:paper-index', kwargs={'slug': self.slug})

During handling of the above exception ('Paper' object has no attribute 'slug'), another exception occurred:

File "/usr/lib/python3.7/site-packages/django/core/handlers/exception.py" in inner
  34.             response = get_response(request)

File "/usr/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response
  126.                 response = self.process_exception_by_middleware(e, request)

File "/usr/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response
  124.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/usr/lib/python3.7/site-packages/django/views/generic/base.py" in view
  68.             return self.dispatch(request, *args, **kwargs)

File "/usr/lib/python3.7/site-packages/django/views/generic/base.py" in dispatch
  88.         return handler(request, *args, **kwargs)

File "/usr/lib/python3.7/site-packages/django/views/generic/edit.py" in post
  172.         return super().post(request, *args, **kwargs)

File "/usr/lib/python3.7/site-packages/django/views/generic/edit.py" in post
  142.             return self.form_valid(form)

File "/usr/lib/python3.7/site-packages/django/views/generic/edit.py" in form_valid
  126.         return super().form_valid(form)

File "/usr/lib/python3.7/site-packages/django/views/generic/edit.py" in form_valid
  57.         return HttpResponseRedirect(self.get_success_url())

File "/usr/lib/python3.7/site-packages/django/views/generic/edit.py" in get_success_url
  119.                     "No URL to redirect to.  Either provide a url or define"

Exception Type: ImproperlyConfigured at /papers/seminartitel15/add/
Exception Value: No URL to redirect to.  Either provide a url or define a get_absolute_url method on the Model.
URL.py:

urlpatterns = [
    path('papers/new/', views.SeminaryCreate.as_view(), name='seminary-add'),
    path('papers/', views.IndexView.as_view(), name='paper-index'),
    path('papers/<str:slug>/', views.DetailView.as_view(), name='paper-detail'),
    path('papers/<str:slug>/add/', views.PaperCreate.as_view(), name='paper-add'),

]
正如文件中所建议的那样

现在我的模板有问题,但我将为此设置一个新问题。
非常感谢

整数错误,非空约束失败:论文\论文.神学院id。

此错误意味着您在具有not null约束的图纸模型中具有SENAMIARY的外键,但在创建图纸对象时,您没有传递SENAMIARY的值(外键).

我也不是专家,但我认为这是因为您的PaperCreate视图无法像数据库所期望的那样将纸张对象链接到神学院对象。每个纸张对象都应具有神学院对象的id,因为您已在纸张模型类中添加了该id:

class Paper(models.Model):
    seminary = models.ForeignKey(Seminary, on_delete=models.CASCADE, primary_key=True)
因为ForeignKey字段不能为null,所以它提出了一个
notnull约束失败:papers\u paper.seminary\u id

所以,或许可以这样做,看看它是否有效:

class PaperCreate(CreateView):
    model = Paper
    fields = [
        'seminary',
        'paper_title',
        'author',
        'upload_paper',
    ]
如果我没记错的话,CreateView应该注意在网页上显示一个下拉菜单,其中包含可用的神学院对象

旁注

是否确定此处的主键属性

class Paper(models.Model):
    seminary = models.ForeignKey(Seminary, on_delete=models.CASCADE, primary_key=True)

请添加完整的回溯。欢迎使用堆栈溢出。您可能需要澄清您正在使用的Python和Django的版本;我想你的意思是你在Python3.7中使用Django 2.1?FK是什么意思?谢谢你的回答。如何传递外键?因为您使用的是基于Django泛型类的视图,所以可以在PaperCreate类的字段中附加'seminary'。我在字段中添加了'seminary'。我想是这样,但现在我得到了一个不同的错误。我编辑了我的帖子。新错误是:“异常类型:配置不正确,异常值:没有要重定向到的URL。请在模型上提供URL或定义get\u absolute\u URL方法。”我建议您开始阅读错误消息。发生此错误是因为Django不知道表单提交后重定向到哪里。所以你有两个选择,你可以在PaperCreate类中定义success\u url,也可以在论文模型中定义get\u absolute url。
阅读get\u absolute url我不知道到目前为止你已经写了多少代码,但从我所看到的,仍然缺少很多。您现在遇到的这个特定错误要求您编写
get\u absolute\u url
方法,该方法用于重定向到必须在模型类中写入的对象的DetailView。你还必须为你的论文和你的神学院对象写一个详细的视图。现在您实际上有了一个针对神学院对象的DetailView类,但我建议将其重命名为SeminaryDetail,然后创建另一个PaperDetail类。如果需要更多帮助,请使用新代码询问另一个问题。
class Paper(models.Model):
    seminary = models.ForeignKey(Seminary, on_delete=models.CASCADE, primary_key=True)