2017-01-29 16 views
0

こんにちは私は自分のブログを構築しています。ブログの投稿に写真を追加しようとしています。今のところ、メディア/ドキュメントフォルダに写真をアップロードできますが、これらの写真を投稿に割り当てるのに問題があります。Djangoモデルのnullableフィールドエラーのエラーメッセージ

これは私のmodels.pyが

post_detail.html

{% for document in post.documents.all %} 
<div style="padding: 10px;"> 
    <p> {{ document.description }} </p> 
    <img src=""/> 
</div> 
{% endfor %} 
01の内側
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 }) 

どのように見えるかです今の

...

{% 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を渡すことができません。誰でもここに何が間違っていると私を助けることができますか?

編集:それは助けている場合、コメントのクラスが同じコード行を持っていますが、まだうまく動作します:

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') 

答えて

0

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 }) 
+0

おかげでたくさん!どのように画像を表示する上で任意のアイデア?私はURLにアクセスする必要がありますが、どうすればいいですか?ファイルはアップロードされているのと同じ名前で現在保存されていますが、何らかの形式で保存してからHTMLタグに渡す必要がありますか? – Deniz

+0

''私は写真を含めるようにしましたが、代わりにひびの入った画像があります – Deniz

+0

画像をアップロードしたいだけなら、 'FileField'の代わりに' ImageField'を使うことができます。 「」 – afilardo