Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法检查django中的多行字符串_Python_Django_String_Django 3.1 - Fatal编程技术网

Python 无法检查django中的多行字符串

Python 无法检查django中的多行字符串,python,django,string,django-3.1,Python,Django,String,Django 3.1,实际上,我想检查用户的答案是正确还是不正确。 当我尝试使用纯python代码输入虚拟数据时,它工作正常 但是,当我尝试将其添加到django中时,它对多行无效,仅对一行有效

实际上,我想检查用户的答案是
正确
还是
不正确
。 当我尝试使用纯python代码输入虚拟数据时,它工作正常

但是,当我尝试将其添加到django中时,它对多行无效,仅对一行有效<我也尝试了3种方法,但仍然不起作用。在我看来,可能是因为
\n
问题
我检查了
类型
s(
正确答案
用户答案
),它给了我

class UserAnswerView(APIView):
    allowed_methods = ('post',)
    permission_classes = (permissions.AllowAny,)  # just for test
    serializer_class = UserAnswerSerializer

    def validate_answer(self, exercise_id, user_answer):
        exercise = Exercise.objects.get_or_none(id=exercise_id)
        if exercise and user_answer:
            if isinstance(user_answer, str):
                correct_answers = exercise.answer_set.published()
                # [method 1]
                # return correct_answers.filter(Q(answer__icontains=user_answer)).exists()

                # [method 2]
                # for correct_answer in correct_answers:
                #     if correct_answer.answer == user_answer:
                #         return True

                # [method 3]
                return any(c.answer == user_answer for c in correct_answers)
        return False
这是
models.py

class Exercise(TimeStampedModel):
    id = models.BigAutoField(primary_key=True)
    title = models.CharField(_('Title'), max_length=200)
    order = models.PositiveIntegerField(_('Order'), default=1)
    course = models.ForeignKey(Course, on_delete=models.CASCADE)
    sort_description = models.TextField(_('Sort Description'))
    description = models.TextField(_('Description'))
    initial_script = models.TextField(_('Initial Script'), blank=True)

    objects = CustomManager()

    def __str__(self):
        return self.title


class Answer(TimeStampedModel):
    id = models.BigAutoField(primary_key=True)
    exercise = models.ForeignKey(Exercise, on_delete=models.CASCADE)
    answer = models.TextField(_('Answer'), help_text=_('The correct answer'))

    objects = CustomManager()

    def __str__(self):
        return self.answer[:50]
在我的测试中,我将此代码放入
user\u-answer
表单中,并将
correct\u-answer

from datetime import datetime

now = datetime.now()
print(now)
无论如何,我也在数据库中输入了一些有效答案

使用
$.ajax
post方法处理的请求也是DRF,所有请求数据都发送到后端


现在,问题出在数据库中,因为它是由
\r
以某种方式添加的。所以,我需要更换它。在我的测试中,我试图将它们打印到列表模式:

number = 0
for canswer in correct_answers:
    number += 1

    print([number, canswer.answer])
    print([number, user_answer])
    print('')
发现的大问题不一样

[1, 'from datetime import datetime\r\nnow = datetime.now()\r\nprint(now)']
[1, 'from datetime import datetime\n\nnow = datetime.now()\nprint(now)']

[2, 'from datetime import datetime\r\n\r\nnow = datetime.now()\r\nprint(now)']
[2, 'from datetime import datetime\n\nnow = datetime.now()\nprint(now)']
所以,我只需要更换它

for canswer in correct_answers:
    correct_answer = canswer.answer.replace('\r', '')
    user_answer = user_answer.replace('\r', '')

    if correct_answer == user_answer:
        return True