Python Django get_或_create()正在创建具有相同id的多行
我的django应用程序中有一个get_或_create(),它创建重复的行并为它们分配相同的idPython 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
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这是一个死链接手册页面会随着每个版本不断变化,他们不会在周围保留非常旧的页面