Django - создание и сохранение нескольких объектов в цикле с помощью ForeignKeys - PullRequest
0 голосов
/ 13 марта 2019

У меня проблемы с созданием и сохранением объектов в Django.Я очень плохо знаком с Django, поэтому я уверен, что упускаю что-то очень очевидное!

Я создаю приложение для сравнения цен, и у меня есть модель поиска:

Search -все выполненные поиски, запись лучшей цены, худшей цены, искомого товара, времени поиска и т. д. Мне удалось сохранить эти поиски в БД, и я доволен этой моделью.

Две новые модели, которые яЯ работаю с:

Result - это предназначено для записи всех результатов поиска, возвращаемых для каждого выполненного поиска.Т.е. продавец 1 £ 100, продавец 2 £ 200, продавец 3, £ 300.(У одного поиска есть много результатов поиска.)

'Агент' - простая таблица Агентов, с которой я сравниваю цены.(Один агент может иметь много результатов поиска.)

class Agent(models.Model):
   agent_id = models.AutoField(primary_key=True)
   agent_name = models.CharField(max_length=30)


class Result(models.Model):
    search_id = models.ForeignKey(Search, on_delete=models.CASCADE)         # Foreign Key of Search table
    agent_id = models.ForeignKey(Agent, on_delete=models.CASCADE)            # Foreign Key of Agent table
    price = models.FloatField()
    search_position = models.IntegerField().

Мой код, который создает и сохраняет объекты, находится здесь:

def update_search_table(listed, product):
  if len(listed) > 0:
    search = Search(product=product,
                    no_of_agents=len(listed),
                    valid_search=1,
                    best_price=listed[0]['cost'],
                    worst_price=listed[-1]['cost'])

    search.save()

    for i in range(len(listed)):
        agent = Agent.objects.get(agent_name = listed[i]['company'])

        # print(agent.agent_id)           # Prints expected value
        # print(search.search_id)         # Prints expected value
        # print(listed[i]['cost'])        # Prints expected value
        # print(i + 1)                    # Prints expected value

        result = Result(search_id = search,
                        agent_id = agent,
                        price = listed[i]['cost'],
                        position = i + 1)

        search.result_set.add(result)
        agent.result_set.add(result)

        result.save()

До search.save() работает как положено.

В первой строке цикла for также корректно извлекается соответствующий агент.

В остальном происходит ошибка (т.е. не сохраняется никаких объектов Result в таблице Result).Я хочу добиться того, чтобы, если было возвращено 10 различных результатов агента, создайте 10 Result объектов и сохраните каждый из них.Свяжите каждый из этих 10 объектов с Search, который вызвал результаты, и свяжите каждый из этих 10 объектов с соответствующими Agent.

Пробовал довольно много итераций, но не уверен, куда я идунеправильно.

Спасибо

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