2017-07-20 17 views
0

Djangoの作業中に、異なるカテゴリを表示するアプリケーションを作成しました。いずれか1つをクリックすると、それに関連するすべてのページを示すウィンドウが開きます。同じウィンドウに、その特定のカテゴリに新しいページを追加するオプションがあります。

nullでない制約のエラーの値に対して、この整合性エラータイプが表示されています。私はこのエラーを理解することはできません。どこが間違っているのか理解してください。私は必要なすべてのスクリプトを投稿しました。Django Integrity Error - NOT NULL制約に失敗しました:zdorovo_page.category_id

models.py 
from django.db import models 
from django.template.defaultfilters import slugify 

class Category(models.Model): 
    name = models.CharField(max_length=128, unique=True) 
    slug = models.SlugField(blank = True, null= True) 

    def save(self, *args, **kwargs): 
     self.slug = slugify(self.name) 
     super(Category, self).save(*args, **kwargs) 

    class Meta: 
     verbose_name_plural = 'categories' 

    def __unicode__(self): 
     return self.name 

class Page(models.Model): 
    category = models.ForeignKey(Category) 
    title = models.CharField(max_length=128) 
    url = models.URLField() 
    views = models.IntegerField(default=0) 

    def __unicode__(self): 
     return self.title 

私は基本的に既存のカテゴリにページを追加しようとしています。これは私のadd_pageビュー

views.py for add_page 
def add_page(request , category_name_slug): 
    category = Category.objects.get(slug = category_name_slug) 
    form = PageForm() 
    if request.method == 'POST': 
     form = PageForm(request.POST) 
     if form.is_valid(): 
      if category: 
       page = form.save(commit = True) 
       page.category = category 
       page.views = 0 
       page.save() 
       return about(request , category_name_slug) 
     else: 
      print form.errors 
    return render(request , 'zdorovo/add_page.html' , {'form': form , 'category': category}) 

についてここでは、特定のカテゴリに既存のページの世話をし、それらを表示するビューです。

これは、誰もが私の側から何かを必要とする場合は、私を更新してください私のforms.py

class CategoryForm(forms.ModelForm): 
    name = forms.CharField(max_length=128, help_text="Please enter the category name.") 
    views = forms.IntegerField(widget=forms.HiddenInput(), initial=0) 
    likes = forms.IntegerField(widget=forms.HiddenInput(), initial=0) 
    slug = forms.CharField(widget=forms.HiddenInput(), required=False) 


    class Meta: 
     model = Category 
     fields = ['name',] 

class PageForm(forms.ModelForm): 
    title = forms.CharField(max_length=128, help_text="Please enter the title of the page.") 
    url = forms.URLField(max_length=200, help_text="Please enter the URL of the page.") 
    views = forms.IntegerField(widget=forms.HiddenInput(), initial=0) 

    class Meta: 
     model = Page 
     exclude = ('category',) 

です。

P.S.-すべてのインデントが処理されましたが、エラーはありません。

答えて

0

あなたのページモデルカテゴリでは必須フィールドです。しかし、page = form.save(commit = True)を実行すると、カテゴリを割り当てずにページオブジェクトを保存しようとしています。したがって、整合性エラーが発生しています。

def add_page(request , category_name_slug): 
    category = Category.objects.get(slug = category_name_slug) 
    form = PageForm() 
    if request.method == 'POST': 
     form = PageForm(request.POST) 
     if form.is_valid(): 
      if category: 
       page = form.save(commit = False) # tells Django that "Don't send this to database yet. 
       # I have more things I want to do with it. 
       page.category = category 
       page.views = 0 
       page.save() 
       return about(request , category_name_slug) 
     else: 
      print form.errors 
    return render(request , 'zdorovo/add_page.html' , {'form': form , 'category': category}) 
+0

を試してみてはそれをしたとの結果を得ました。 – PRATEEK

0

あなたはとても近いです。変更:

page = form.save(commit=True) 

フォームはモデルオブジェクトに変換されたときにフォームのオブジェクトがデータベースに保存されません、このよう

page = form.save(commit=False) 

へ。 categoryを手動で設定すると保存されます。

これが役に立ちます。

関連する問題