2017-04-27 77 views
0

一切工作正常後,突然我得到這個錯誤MultipleObjectsReturned - get()方法返回一個以上的ContentType - 它返回2

MultipleObjectsReturned在/羅希特/後/新崗位/

get()返回多個ContentType - 它返回2!

我不知道爲什麼它返回兩個對象。它只是假設返回一個,我不能 算出來。幫助我們。這裏是我的代碼:

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(型號= c_type)'明顯返回多於一種內容類型。 –

+0

您從db獲取請求時,對於相同的搜索有多個條目。 –

回答

-1

如果你要調試,我建議你使用過濾器而不是get。

在你看來:

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

現在CONTENT_TYPE你將擁有2個對象。

0

我剛剛認識這個問題。

在您的數據庫中,有一個表名爲django_content_type

,因爲ü有相同名稱一些舊CONTENT_TYPE。

ü可以使用sqlitebrowser刪除這些。