2017-04-27 3 views
0

모든 것이 갑자기 내가이 오류MultipleObjectsReturned - 그것은 2

MultipleObjectsReturned에서/rohit/후/새로운 포스트/

있어 다음 잘 작동되었다 반환 - 하나 이상의 ContentType을 반환() 수

get()이 두 개 이상의 ContentType을 반환했습니다. - 2를 반환했습니다!

왜 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 (model = c_type)'은 분명히 하나 이상의 콘텐츠 유형을 반환합니다. –

+0

동일한 검색에 대해 두 개 이상의 항목이있는 db로부터 요청을 가져옵니다. –

답변

-1

, 난 당신을 제안 여기 내 코드입니다 get 대신에 필터를 사용한다. 보기에

:

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

지금 당신은 당신이 개체가됩니다 CONTENT_TYPE에.

0

방금이 문제가 발생했습니다. 데이터베이스에서 django_content_type이라는 테이블이 있습니다.

동일한 이름을 가진 이전 content_type이 있기 때문에.

u는 sqlitebrowser을 사용하여이를 삭제할 수 있습니다.