我在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循环的第一行也正在正确检索相关的Agent。
其余部分都出错了(即未将任何Result对象保存到Result表中)。我要实现的是,如果返回10个不同的代理结果,则创建10个Result
对象并保存每个对象。将这10个对象中的每一个链接到触发结果的Search
,然后将这10个对象中的每个链接到相关的Agent
。
已经尝试了很多次迭代,但是不确定我要去哪里。
谢谢