У меня проблемы с созданием и сохранением объектов в 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
.
Пробовал довольно много итераций, но не уверен, куда я идунеправильно.
Спасибо