Django 模型可为空字段错误 makemigrations

Django model nullable field error makemigrations

您好,我正在建立自己的博客,并且一直在尝试将照片添加到我的博客文章中。现在,我可以将照片上传到 media/documents 文件夹,但是我在将这些照片分配到帖子时遇到问题。

这就是我的 models.py 的样子

class Document(models.Model):
    post = models.ForeignKey('blog.Post', related_name='documents', null = True)
    description = models.CharField(max_length=255, blank=True)
    document = models.FileField(upload_to='documents/')
    uploaded_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.text

forms.py

class DocumentForm(forms.ModelForm):
class Meta:
    model = Document
    fields = ('description', 'document')

views.py

@login_required
def model_form_upload(request, pk):
    post = get_object_or_404(Post, pk=pk)
    if request.method == 'POST':
        form = DocumentForm(request.POST, request.FILES)
        if form.is_valid():
            form.post = post
            form.save()
            return redirect('/')
    else:
        form = DocumentForm()
    return render(request, 'blog/model_form_upload.html', { 'form': form })

里面post_detail.html

{% for document in post.documents.all %}
<div style="padding: 10px;">
  <p> {{ document.description }} </p>
  <img src=""/>
</div>
{% endfor %}

...

{% if user.is_authenticated %}
    <a class="btn btn-default" href="{% url 'model_form_upload' pk=post.pk %}">Add photo</a>
{% endif %}

现在,我尝试打印出描述,然后处理 url 会更容易。照片正在上传,它们只是没有连接到帖子。当我删除 null = True 时,我无法在命令行上传递 makemigrations。谁能帮我解决这里的问题?

编辑:如果有帮助,评论 class 具有相同的代码行,但仍然可以正常工作:

models.py

class Comment(models.Model):
    post = models.ForeignKey('blog.Post', related_name='comments')
    author = models.CharField(max_length=200)
    text = models.TextField()
    created_date = models.DateTimeField(default=timezone.now)
    approved_comment = models.BooleanField(default=False)

    def approve(self):
        self.approved_comment = True
        self.save()

    def __str__(self):
        return self.text

forms.py

class CommentForm(forms.ModelForm):

    class Meta:
        model = Comment
        fields = ('author', 'text')

你的DocumentForm没有post属性,不知道怎么保存。

将除 post 之外的所有字段添加到 DocumentForm

class DocumentForm(ModelForm):
    class Meta:
        model = Document
        exclude = ['post']

然后,在视图中执行以下操作:

@login_required
def model_form_upload(request, pk):
    post = get_object_or_404(Post, pk=pk)
    if request.method == 'POST':
        form = DocumentForm(request.POST, request.FILES)
        if form.is_valid():
            document = form.save(commit=False)
            document.post = post
            document.save()
            return redirect('/')
    else:
        form = DocumentForm()
    return render(request, 'blog/model_form_upload.html', { 'form': form })