Как сохранить данные в базе данных в python django, которая в виде списка и списка представляет собой набор словарей? - PullRequest
0 голосов
/ 30 апреля 2020

Привет всем Я новичок в python django Framework и я застрял в программе, пожалуйста, помогите мне. Заранее спасибо. Проблема: я получаю данные, используя метод запросов и содержащие все данные в форме dict, а затем добавляю их в список. Теперь я хочу сохранить все данные dict в базу данных в соответствии с моими моделями, но здесь я не могу сделать это, пожалуйста, помогите мне. вот мой код модели

    class Question(models.Model):
        question_title = models.CharField(max_length=300)
        question_tag = models.CharField(max_length=250)
        question_url = models.URLField(max_length=300)
        question_view_count = models.CharField(max_length=50, null=True, blank=True)
        question_answer_count = models.CharField(max_length=50, null=True, blank=True)

        def __str__(self):
            return self.question_title

Вот мой файл views.py для поиска вопроса и сохранения его в базе данных. В views.py я храню данные в списке, который поступает в форме dict, поэтому в основном данные в форме диктов, так как я могу выполнить все oop, с помощью которого данные сохраняются в базе данных в соответствии с моим models.py из формы dict.

    def questionSearch(request):
        if request.method == 'GET':
            question_title = request.GET.get('title',)
            question_tag = request.GET.get('tag',)
        url = 'https://api.stackexchange.com/' + f'2.2/search/advanced? 
              order=desc&sort=activity&q={question_title}&accepted=False&answers=1&tagged= {question_tag}&site=stackoverflow'
        resp = requests.get(url)
        resp = resp.json()
        questions = []
        question_data = {}
        for i in resp["items"]:
            if i["is_answered"]:
                question_data = {
                    'question_url': i["link"],
                    'question_title': i["title"],
                    'question_tag': i["tags"],
                    'question_view_count': i["view_count"],
                    'question_answer_count': i["answer_count"]
                }
            questions.append(question_data)
        total = []
        for item in questions:
            for key in item.keys():
                total.append(item[key])
                question = Question()
                for i in total:
                    question.question_url = i
                    question.question_title = i
                    question.question_tag = i
                    question.question_view_count = i
                    question.question_answer_count = i  
                question.save()

        context = {
            'questions': questions,
            }

        return render(request, 'stackAPI/index.html', context)

1 Ответ

0 голосов
/ 30 апреля 2020

Я бы определил метод в модели, чтобы получать данные из dict:

class Question(models.Model):
        question_title = models.CharField(max_length=300)
        question_tag = models.CharField(max_length=250)
        question_url = models.URLField(max_length=300)
        question_view_count = models.CharField(max_length=50, null=True, blank=True)
        question_answer_count = models.CharField(max_length=50, null=True, blank=True)

        def from_dict(self, item):
            self.question_title = item["question_title"]
            self.question_tag = item["question_tag"]
            self.question_url = item["question_url"]
            self.question_view_count = item["question_view_count"]
            self.question_answer_count = item["question_answer_count"]

        def __str__(self):
            return self.question_title

и использовать его в представлении:

       for item in questions:
           question = Question()
           question.from_dict(item)
           question.save()

С уважением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...