Python Django get_或_create()正在创建具有相同id的多行

Python Django get_或_create()正在创建具有相同id的多行,python,django,python-2.7,postgresql,django-models,Python,Django,Python 2.7,Postgresql,Django Models,我的django应用程序中有一个get_或_create(),它创建重复的行并为它们分配相同的id stock_search, created = SearchRequest.objects.get_or_create(quote=quote, salesperson=user) count()不会对这些行进行多次计数,但我对数据运行的任何查询都会返回重复的行 你知道是什么导致了这一切吗 模型定义 class SearchRequest(models.Model): salespers

我的django应用程序中有一个get_或_create(),它创建重复的行并为它们分配相同的id

stock_search, created = SearchRequest.objects.get_or_create(quote=quote, salesperson=user)
count()不会对这些行进行多次计数,但我对数据运行的任何查询都会返回重复的行

你知道是什么导致了这一切吗

模型定义

class SearchRequest(models.Model):
    salesperson             =   models.ForeignKey(User, blank=True, null=True, related_name='sales')
    purchaser               =   models.ManyToManyField(User, blank=True, null=True, related_name='purchaser')
    datesent                =   models.DateTimeField(auto_now_add=False, verbose_name=("Date Sent"), blank=True, null=True)
    notes                   =   models.TextField(default='', blank=True, null=True)
    full_search             =   models.BooleanField(verbose_name=("Full Search"), blank=True, default=False)
    quote                   =   models.ForeignKey('Quote.Quote', blank=True, null=True)
    lead_time               =   models.ForeignKey('Logistics.LeadTime', blank=True, null=True)
    call_list               =   models.BooleanField(verbose_name=("Call List"), blank=True, default=False)
    email_list              =   models.BooleanField(verbose_name=("Email List"), blank=True, default=False)
    accepted                =   models.ForeignKey(User, blank=True, null=True, related_name='search_accepted')
    dateaccepted            =   models.DateTimeField(auto_now_add=False, verbose_name=("Date Accepted"), blank=True, null=True)
干杯

如中所述,您需要一个唯一的索引才能让get_或_create正常工作

假设使用正确,数据库正确,此方法是原子的 配置,以及基础数据库的正确行为。 但是,如果没有在数据库级别为 在get_或_create调用中使用的KWARG(一起查看unique或unique_), 此方法容易出现竞争条件,从而导致多个 同时插入具有相同参数的行

所以你需要上课

class SearchRequest(models.Model):
    class Meta:
        unique_together('quote','salesperson')
应将其放置在字段定义之后。

如中所述,您需要一个唯一的索引才能使用get\u或\u create

假设使用正确,数据库正确,此方法是原子的 配置,以及基础数据库的正确行为。 但是,如果没有在数据库级别为 在get_或_create调用中使用的KWARG(一起查看unique或unique_), 此方法容易出现竞争条件,从而导致多个 同时插入具有相同参数的行

所以你需要上课

class SearchRequest(models.Model):
    class Meta:
        unique_together('quote','salesperson')

应该放在字段定义之后。

您如何调用它?您需要向我们展示一些代码。我们无法凭空想象如何解决您的问题。我添加了一个代码示例,我在不同领域进行了尝试,得到了相同的结果。这里的信息太少,无法解决您的问题,甚至无法证明您所说的是真的。ID通常是唯一的,因此如何获得具有相同ID的多行是一个谜。这意味着我们需要了解您的模型是如何设置的。如果它们是唯一的,并且您在查询中看到了重复,那么我们需要查看该查询/代码,以确定出现重复的原因以及是否有解决方法。有了这一点信息,我们基本上什么也做不了,只能说,“对不起,发生了这种情况。”您添加的模型似乎与您在获取或创建中使用的模型没有任何关系。这里没有用户你怎么调用它?你需要给我们看一些代码。我们无法凭空想象如何解决您的问题。我添加了一个代码示例,我在不同领域进行了尝试,得到了相同的结果。这里的信息太少,无法解决您的问题,甚至无法证明您所说的是真的。ID通常是唯一的,因此如何获得具有相同ID的多行是一个谜。这意味着我们需要了解您的模型是如何设置的。如果它们是唯一的,并且您在查询中看到了重复,那么我们需要查看该查询/代码,以确定出现重复的原因以及是否有解决方法。有了这一点信息,我们基本上什么也做不了,只能说,“对不起,发生了这种情况。”您添加的模型似乎与您在获取或创建中使用的模型没有任何关系。IT中没有用户Fyi这是一个死链接手册页面会随着每个版本不断变化,他们不会在周围保留非常旧的页面Fyi这是一个死链接手册页面会随着每个版本不断变化,他们不会在周围保留非常旧的页面