2017-06-18 208 views
1

我有這樣的錯誤,我怎麼能解決這個問題?Django的get()方法返回一個以上

get()方法返回一個以上的事件 - 它返回2!

你們能幫我理解這意味着什麼,也許事先告訴我如何在將來避免這個錯誤?如果不止一個對象被發現,更多信息here

模型

class Event (models.Model): 
    name = models.CharField(max_length=100) 
    date = models.DateField(default='') 
    dicript = models.CharField(max_length=50, default='Описание отсутствует') 
    category = models.ForeignKey(Category,on_delete=models.CASCADE) 
    adress = models.TextField(max_length=300) 
    user = models.ForeignKey(User,related_name="creator",null=True) 
    subs = models.ManyToManyField(User, related_name='subs',blank=True) 

    @classmethod 
    def make_sub(cls, this_user, sub_event): 
     event, created = cls.objects.get_or_create(
      user=this_user 
     ) 
     sub_event.subs.add(this_user) 

VIEWS

def cards_detail (request,pk=None): 
    # if pk: 
    event_detail = Event.objects.get(pk=pk) 
    subs = event_detail.subs.count() 

    # else: 
    #  return CardsView() 
    args = {'event_detail':event_detail,'subs':subs} 
    return render(request,'events/cards_detail.html',args) 


class CardsView (TemplateView):` 
    template_name = 'events/cards.html' 

    def get (self,request): 
     events = Event.objects.all() 
     return render(request,self.template_name,{'events':events }) 

def subs_to_event (request,pk=None): 

    event = Event.objects.filter(pk=pk) 
    Event.make_sub(request.user,event) 


    return redirect('events:cards') 

回答

1
from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned 
try: 
    instance = Instance.objects.get(name=name) 
except (ObjectDoesNotExist, MultipleObjectsReturned): 
    pass 

的get()會引發MultipleObjectsReturned。 錯誤是由event_detail = Event.objects.get(pk=pk)引起的,檢查你的事件pk是唯一的。

0

基本上,CLS對象越來越對「get_or_create()」的get部分多於一個的值。 get()只返回一個對象,而過濾器返回一個字典(ish)。 把它放在一個嘗試/除了相反。所以你必須:

try: 
    event, created = cls.objects.get_or_create(
    user=this_user 
    ) 
except cls.MultipleObjectsReturned: 
    event = cls.objects.filter(user=this_user).order_by('id').first() 

這樣,如果找到了多個對象,它處理異常和改變查詢過濾器接收多個對象的查詢集。如果找不到記錄,則無需捕獲Object.DoesNotExist,因爲創建部分會創建新對象。

+0

謝謝,現在它不通過免除,但不做任何事 – rumor

+0

@rumor我猜你的意思是現在處理的異常,很好,你把'sub_event.subs.add(this_user)'放回塊?你的make_sub方法會將用戶添加到子目錄中。 – shaded

+0

是的,當然 什麼,我接下來要做,以解決這一問題嗎?請幫我 – rumor

相關問題