线程在django中相互冲突

时间:2016-06-22 19:14:37

标签: python django multithreading django-models

我的django应用程序中出现了一个奇怪的问题。在我的应用程序中,我有一个像这样的模型A

class ModelA(models.Model):
    name = models.CharField(max_length=30)

和另一个使用模型A外键的模型B

class ModelB(models.Model):
    modelA = models.ForeignKey(ModelA)
    name = models.CharField(max_length=30)

我有一个视图,我生成一个报告,其中我有ModelA对象的值,我想要创建所有ModelB对象的模型A'宾语。我这样做是

obj_list = ModelB.objects.filter(modelA=modelA_object)

我得到的问题是有时(并非总是),我得到与modelA_object无关的ModelB对象。从表面上看,它与其他一些modelA_object有关。 例如,我有两个modelA对象A1 and A2。还有一些modelB对象B1 and B2。这里B1正在使用A1外键,而B2正在使用A2外键。在正常情况下,当我运行以下代码

obj_list = ModelB.objects.filter(modelA=A1)

obj_list将包含B1。但有时(并非总是)我在该列表中得到B2。似乎报告的两个请求/线程彼此冲突。它不会经常发生,当它发生时,当我第二次生成报告时,它会显示正确的结果。我在DB中没有写任何东西,因为我在生成报告。有谁可以帮我解决这个问题?

原始代码:

任务模型:

class Tasks(models.Model):
    name = models.CharField(max_length=500)
    description = models.CharField(max_length=5000)
    job = models.ForeignKey(JobPosition)

测试传导模型:

class TestConducted(models.Model):
    clinic = models.ForeignKey(Entity)
    applied = models.ForeignKey(CandidateApplied)
    result = models.ForeignKey(TestResults)
    date = models.DateTimeField(blank=True)
    comments = models.CharField(max_length=5000, blank=True)
    dynamic_Lifts = models.CharField(max_length=1000, blank=True)
    not_cap_Comments = models.CharField(max_length=5000, blank=True)
    hidden = models.BooleanField(default=False)
    is_invoiced = models.BooleanField(default=False)
    modified = AutoLastModifiedField(('modified'))

CandidateApplied Model:

class CandidateApplied(models.Model):
    candidate = models.ForeignKey(Candidate)
    format = models.ForeignKey(TestFormat)
    jobposition = models.ForeignKey(JobPosition,
                                blank=True,
                                null=True)
    barcode = models.IntegerField(max_length=6, blank=True, null=True)

特定的TestConducted模型对象只能有一个CandidateApplied模型对象。 这就是我访问任务的方式

var_conducted = "TestConducted Model Object"
temp_tasks = Tasks.objects.filter(job=var_conducted.applied.jobposition.id).values_list \
            ('name', 'description').order_by('id')

这里jobposition是另一个类似的模型

class JobPosition(TimeStampedModel):
    title = models.CharField(max_length=200)
    description = models.CharField(max_length=400, blank=True)
    SOC_Code = models.CharField(max_length=400, blank=True)
    PDC = models.CharField(max_length=100, choices=Values.CUSTOM_PDC_OPTIONS)
    entity = models.ForeignKey(Entity, blank=True, null=True)
    is_active = models.BooleanField(default=True)
    billed_amount = models.IntegerField(default=0, blank=True)
    hidden = models.BooleanField(default=False)
    monthly_invoice = models.BooleanField(default=False)

0 个答案:

没有答案