Django __str__返回非字符串(类型DeferredAttribute)

时间:2018-04-10 11:25:42

标签: python django django-models django-forms

我对Django有点问题。当我尝试访问特定视图时,我得到标题错误 __ str__返回非字符串(类型DeferredAttribute)。我认为它与我在视图中呈现的表单有关,但我自己无法找到问题。

这是我的模特:

class ItemElements(models.Model):
   itemid = models.ForeignKey(Items, on_delete = models.CASCADE)
   elementid = models.ForeignKey(Elements, on_delete = models.CASCADE)
   percentage = models.IntegerField()
   created_at = models.DateTimeField(auto_now_add=True)
   updated_at = models.DateTimeField(auto_now=True)

表格:

class ItemElementsForm(forms.ModelForm):
   class Meta:
       model = ItemElements
       fields = ['itemid', 'elementid', 'percentage']
       labels = {
           'itemid' : 'Item',
           'elementid' : 'Element',
           'percentage' : 'Percentage'
       }

观点:

def addelements(request):
   if request.method == 'POST':
       form = ItemElementsForm(request.POST)
       if form.is_valid():
           elementsForm= form.save(commit=False)
           elementsForm.save()
           return redirect('addelements')
   else:
       form = ItemElementsForm()
   return render(
       request,
       'add/addelements/index.html',
       {'form': form}
   )

我无法真正看到问题所在。我从另一个工作表单和视图复制和修改。除此之外,它与其他形式完全相同。

2 个答案:

答案 0 :(得分:0)

检查您的型号。你应该有像

这样的东西
class ItemElements(models.Model):  
    itemid = models.ForeignKey(Items, on_delete = models.CASCADE)
    elementid = models.ForeignKey(Elements, on_delete = models.CASCADE)
    percentage = models.IntegerField()
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    def __str__(self): #For Python 3, use __unicode__ on Python 2
        return str(self.created_at)

答案 1 :(得分:0)

好吧,显然我发现了这个问题。我所要做的就是在模型上创建一个主键。

primaryid = models.AutoField(primary_key = True)