【问题标题】:JSON Response "This field may not be null." Django Rest FrameworkJSON 响应“此字段可能不为空。” Django 休息框架
【发布时间】:2020-07-19 05:55:40
【问题描述】:

我正在尝试将来自 JSON 响应的数据添加到我的数据库中。这是我的models.py 的样子

class Question(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
category = models.ForeignKey(Category, on_delete=models.CASCADE, null=False)
question = models.CharField(max_length=100000, unique=False)
options = models.ManyToManyField("Options")
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
answer = models.ForeignKey(Options, related_name="correct", on_delete=models.CASCADE, null = False)
difficulty = models.CharField(max_length=5000)
type = models.CharField(max_length=2000)

这是我的views.py 的样子。

@api_view(['POST'])
def opendb(request):
    data = requests.get(url=request.data['url']).json()
    print(data)
    QuestionData = {
        "category": data.get('category'),
        "type": data.get('type'),
        "difficulty": data.get('difficulty'),
        "question": data.get('question'),
        "answer": data.get('correct_answer'),
        "options": data.get('incorrect_answers'),
    }
    serializer = QuestionSerializer(data=QuestionData)
    if serializer.is_valid():
        serializer.save()
        return JsonResponse({
            "data": serializer.data
        }, status=status.HTTP_200_OK)
    return JsonResponse(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

当我向这个视图发送一个 url 时会发生什么

{
"question": [
    "This field may not be null."
],
"difficulty": [
    "This field may not be null."
],
"type": [
    "This field may not be null."
],
"category": [
    "This field may not be null."
],
"answer": [
    "This field may not be null."
],
"options": [
    "This field may not be null."
]

这是我需要从返回 JSON 中填充数据的 API 的方式

{
"response_code": 0,
"results": [
    {
        "category": "General Knowledge",
        "type": "multiple",
        "difficulty": "easy",
        "question": "What do the letters in the GMT time zone stand for?",
        "correct_answer": "Greenwich Mean Time",
        "incorrect_answers": [
            "Global Meridian Time",
            "General Median Time",
            "Glasgow Man Time"
        ]
    }
]

print(data) 输出以下内容:

{'response_code': 0, 'results': [{'category': 'General Knowledge', 'type': 'multiple', 'difficulty': 'easy', 'question': 'What is the name of the Jewish New Year?', 'correct_answer': 'Rosh Hashanah', 'incorrect_answers': ['Elul', 'New Year', 'Succoss']}]}

是不是格式问题?

【问题讨论】:

  • print(data) 的输出是什么?请在问题中添加它。
  • 完成,我还可以让它显示多个问题,但我现在保持简单。
  • 实际数据存在于 data['results'] 中。迭代 data['results'] 并形成 QuestionData
  • @yogaraj 我已经做了类似data = requests.get(url = request.data['url']).json() quesdata = data['results'] print(quesdata) 但不知道如何继续构建QuestionData 并将data 更改为新的quesdata 没有似乎工作。如果您可以在原始视图中编写此内容,那将非常有帮助,在此停留了 2 天...

标签: python django django-models django-rest-framework django-views


【解决方案1】:

@Mohammed Adel,假设QuestionSerializer 将输入data 作为字典列表,下面的视图方法将有所帮助。

def opendb(request):
    data = requests.get(url=request.data['url']).json()
    questions_to_serialize = []

    for question_data in data.get('results', []):
        QuestionData = {
            "category": question_data.get('category'),
            "type": question_data.get('type'),
            "difficulty": question_data.get('difficulty'),
            "question": question_data.get('question'),
            "answer": question_data.get('correct_answer'),
            "options": question_data.get('incorrect_answers'),
        }
        questions_to_serialize.append(QuestionData)
    
    serializer = QuestionSerializer(data = questions_to_serialize)
    if serializer.is_valid():
        serializer.save()
        return JsonResponse({
            "data": serializer.data
        }, status = status.HTTP_200_OK)
    return JsonResponse(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 2013-04-08
    相关资源
    最近更新 更多