python: cannot concatenate 'str' and 'long' objects

前端 未结 5 1906
失恋的感觉
失恋的感觉 2020-12-11 14:34

I\'m trying to set up a choice field in django, but I don\'t think this is a django issue. The choices field takes an iterable (e.g., a list or tuple) of 2-tuples to use as

相关标签:
5条回答
  • 2020-12-11 15:10

    This is a problem with doing too many things in one line - the error messages become slightly less helpful. Had you written it as below the problem would be much easier to find

    question_id = 'question_' + question.id
    self.fields[question_id] = forms.ChoiceField(
                    label=question.label,
                    help_text=question.description,
                    required=question.answer_set.required,
                    choices=[("fe", "a feat"), ("faaa", "sfwerwer")])
    
    0 讨论(0)
  • 2020-12-11 15:13

    'question_' is a string, question.id is a long. You can not concatenate two things of different types, you will have to convert the long to a string using str(question.id).

    0 讨论(0)
  • 2020-12-11 15:13

    Probably question.id is an integer. Try

    self.fields['question_' + str(question.id)] = ...
    

    instead.

    0 讨论(0)
  • 2020-12-11 15:22
    self.fields['question_' + question.id]
    

    That looks like the problem. Try

    "question_%f"%question.id
    

    or

    "question_"+ str(question.id)
    
    0 讨论(0)
  • 2020-12-11 15:26

    Most likely it's highlighting the last line only because you split the statement over multiple lines.

    The fix for the actual problem will most likely be changing

    self.fields['question_' + question.id]
    

    to

    self.fields['question_' + str(question.id)]
    

    As you can quickly test in a Python interpreter, adding a string and a number together doesn't work:

    >>> 'hi' + 6
    
    Traceback (most recent call last):
      File "<pyshell#0>", line 1, in <module>
        'hi' + 6
    TypeError: cannot concatenate 'str' and 'int' objects
    >>> 'hi' + str(6)
    'hi6'
    
    0 讨论(0)
提交回复
热议问题