2016-03-03 115 views
0

我獲得以下錯誤Django的NoneType'對象不是可迭代

對象

「在/塊/選擇/ NoneType類型錯誤」不是可迭代

我該怎麼辦錯了嗎?

視圖

def choices(request): 

    form = RoomLogChoices() 
    form.fields['choice'].choices = list() 
    for i in Room.objects.all(): 
     form.fields['choice'].choices = form.fields['choice'].choices.append(
      (
       i.room_name, 
       list(
        (o.id, o.room_value) for o in RoomLog.objects.filter(room=i).order_by('room') 
       ) 
      ) 
     ) 

形式

class RoomLogChoices(forms.ModelForm): 
    choice = forms.ModelChoiceField(
     queryset=RoomLog.objects.all().order_by('room__room_name', 'room_value') 
    ) 

    class Meta: 
     model = RoomLog 
     fields = '__all__' 

編輯: 下面是我的模型的要求。我使用兩種模式出於以下原因:Room和RoomLog。 RoomLog僅用於跟蹤房間值更新的歷史記錄。

模型

class Room(models.Model): 
    room_name = models.CharField(max_length= 10) 
    room_value = models.PositiveSmallIntegerField(default=0) 
    flat = models.ForeignKey(Flat) 
    created_date = models.DateField(auto_now_add= True) 
    created_time = models.TimeField(auto_now_add= True) 

    def __init__(self, *args, **kwargs): 
     super(Room, self).__init__(*args, **kwargs) 
     self.value_original = self.room_value 


    def save(self, **kwargs): 
     with transaction.atomic(): 
      response = super(Room, self).save(**kwargs) 
      if self.value_original != self.room_value: 
       room_log = RoomLog() 
       room_log.room = self 
       room_log.room_value = self.value_original 
       room_log.save() 

      return response 

    class Meta: 
     ordering = ('room_name',) 

    def __unicode__(self): 
     return self.room_name 


class RoomLog(models.Model): 
    room = models.ForeignKey(Room) 
    room_value = models.PositiveSmallIntegerField(default=0) 
    update_date = models.DateField(auto_now_add= True) 
    update_time = models.TimeField(auto_now_add= True) 

    def __str__(self): 
     return '%s | %s | %s' % (self.room, self.update_date, self.update_time) 
+0

我可以看到您的模型嗎? – arcegk

+0

在這行'form.fields ['choice']。choices = form.fields ['choice']。choices.append('你將'choices'設置爲'None'。 –

回答

1

list.append 「就地」 更新列表,並返回None

例如:

my_list = [1, 2, 3] 
new_list = my_list.append(4) 
print my_list, new_list 

[1,2,3, 4]無

只需刪除賦值語句。

def choices(request): 

form = RoomLogChoices() 
form.fields['choice'].choices = list() 
for i in Room.objects.all(): 
    form.fields['choice'].choices.append(
     (
      i.room_name, 
      list(
       (o.id, o.room_value) for o in RoomLog.objects.filter(room=i).order_by('room') 
      ) 
     ) 
    ) 
相關問題