Django-使用ForeignKeys

时间:2019-03-13 19:09:14

标签: django python-3.x django-models

我在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

已经尝试了很多次迭代,但是不确定我要去哪里。

谢谢

0 个答案:

没有答案