创建帖子但出现IntegrityError

时间:2019-02-18 07:40:12

标签: django

我正在尝试创建帖子并更新我的帖子列表。我目前收到此错误IntegrityError at /posts/create/ NOT NULL constraint failed: posts_post.publish不确定该错误意味着什么以及如何解决。下面的文件是我的posts / views.py,forms.py,post_forms.py和模型

def posts_create(request):
    # return HttpResponse("<h1> Create a posts. </h1>")
    form = PostForm(request.POST or None)

    if form.is_valid():
        instance = form.save(commit=False)
        instance.user = request.user
        instance.save()

    context = {
        "form": form
    }

    # if request.method == "POST":
    #     print("This is the content: ", request.POST.get("content"))
    return render(request, "post_form.html", context)


def posts_detail(request, id):
    instance = get_object_or_404(Post, id=id)
    context = {
        "user": instance.user,
        "instance": instance
    }
    return render(request, "posts_detail.html", context)


def posts_list(request):
    # return HttpResponse("<h1> List a posts. </h1>")
    # TODO: Privacy stuff
    queryset = Post.objects.all()
    context = {
        "object_list": queryset,
        "user": "username"
    }
    return render(request, "post.html", context)

发布模型:

user = models.ForeignKey(settings.AUTH_USER_MODEL,
                         on_delete=models.CASCADE)

status = models.CharField(max_length=6, choices=Status, default=POST)
content = models.TextField()
publish = models.DateField(auto_now=False, auto_now_add=False)
updated = models.DateTimeField(auto_now=True, auto_now_add=False)
timestamp = models.DateTimeField(auto_now=False, auto_now_add=True)
privacy = models.IntegerField(choices=Privacy, default=PUBLIC)
unlisted = models.BooleanField(default=False)

这是post_form.html

<html>
  <body>
    <h3>Create Post</h3>

    <form method="POST" action="">
      {% csrf_token %}
      {{ form.as_p }}
      <input type="submit" value="Share" />
    </form>
  </body>
</html>

这是各自的表格。py

from django import forms

from .models import Post


class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = [
            "content"
        ]

1 个答案:

答案 0 :(得分:0)

from datetime import datetime


def posts_create(request):
    # return HttpResponse("<h1> Create a posts. </h1>")
    form = PostForm(request.POST or None)

    if form.is_valid():
        instance = form.save(commit=False)
        instance.user = request.user
        instance.publish = datetime.now()
        instance.save()

    context = {
        "form": form
    }

    # if request.method == "POST":
    #     print("This is the content: ", request.POST.get("content"))
    return render(request, "post_form.html", context)

在您的视图中执行此操作。导入第一行然后更改您的视图