2017-04-27 7 views
0

すべてが突然、私はこのエラーMultipleObjectsReturned - それは2

MultipleObjectsReturnedで/のRohit /ポスト/新ポスト/

を得た後、正常に動作して返さ - 複数のContentTypeをを返さ()を取得

get()は複数のContentTypeを返しました - 2を返しました!

なぜ2つのオブジェクトが返されたのか分かりません。それはちょうど1つを返すと仮定し、私は それを把握することはできません。みんな助けてここに私のコードは次のとおりです。

models.py:

class Comment(models.Model): 
    user  = models.ForeignKey(settings.AUTH_USER_MODEL, default=1) 
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) 
    object_id = models.PositiveIntegerField() 
    content_object = GenericForeignKey('content_type', 'object_id') 
    parent  = models.ForeignKey("self", null=True, blank=True) 

    content  = models.TextField() 
    timestamp = models.DateTimeField(auto_now_add=True) 

    objects = CommentManager() 

    class Meta: 
     ordering = ['timestamp'] 


    def __unicode__(self): 
     return str(self.user.username) 

    def __str__(self): 
     return str(self.user.username) 

    def get_absolute_url(self): 
     return reverse("comments:thread", kwargs={"id": self.id}) 

    def get_delete_url(self): 
     return reverse("comments:delete", kwargs={"id": self.id}) 

    def children(self): #replies 
     return Comment.objects.filter(parent=self) 

    @property 
    def is_parent(self): 
     if self.parent is not None: 
      return False 
     return True 

Views.py:

instance = get_object_or_404(Post, slug = slug) 
initial_data = { 
      "content_type": instance.get_content_type, 
      "object_id": instance.id 
    } 
    print(initial_data) 
    form = CommentForm(request.POST or None, initial= initial_data) 
    if form.is_valid() and request.user.is_authenticated(): 
     c_type = form.cleaned_data.get("content_type") 
     print('c_type : ',c_type) 
     content_type = ContentType.objects.get(model=c_type) 
     print(content_type) 
     obj_id = form.cleaned_data.get('object_id') 
     content_data = form.cleaned_data.get("content") 
     parent_obj = None 
     try: 
      parent_id = int(request.POST.get("parent_id")) 
     except: 
      parent_id = None 

     if parent_id: 
      parent_qs = Comment.objects.filter(id=parent_id) 
      if parent_qs.exists() and parent_qs.count() == 1: 
       parent_obj = parent_qs.first() 


     new_comment, created = Comment.objects.get_or_create(
          user = request.user, 
          content_type= content_type, 
          object_id = obj_id, 
          content = content_data, 
          parent = parent_obj, 
         ) 

Forms.py:

class CommentForm(forms.Form): 
    content_type = forms.CharField(widget=forms.HiddenInput) 
    object_id = forms.IntegerField(widget=forms.HiddenInput) 
    #parent_id = forms.IntegerField(widget=forms.HiddenInput, required=False) 
    content = forms.CharField(label='',widget=forms.Textarea(attrs={'class':"mdl-textfield__input",'type':"text", 'rows':"3", 'id':"sample5"})) 
+0

「ContentType.objects.get(model = c_type)」は明らかに複数のコンテンツタイプを返します。 –

+0

同じ検索で複数のエントリを持つdbからのリクエストを取得します。 –

答えて

-1

デバッグしたい場合は、私はあなたを示唆しますgetの代わりにfilterを使用します。あなたのビューで

content_type = ContentType.objects.filter(model=c_type) 
print(content_type) 

今、あなたはあなたの2つのオブジェクトを持つことになりますCONTENT_TYPEに。

0

私はこの問題に直面しました。データベース内のdjango_content_typeという名前のテーブルがあります。

同じ名前の古いcontent_typeがあるためです。

uはsqlitebrowserを使用してこれらを削除できます。

関連する問題