【问题标题】:Django Model Relation entriesDjango 模型关系条目
【发布时间】:2020-11-01 21:38:53
【问题描述】:

我有数据,我想将其组织为:

我为 MonthsM、Wellinfo 和 TestPRODM 创建了三个表:

class MonthsM(models.Model):
    MonthsM = models.DateTimeField(unique=True)

class Wellinfo (models.Model):
    WellID    = models.CharField(max_length=15,unique=True)



class TestPRODM(models.Model):
    WellID    = models.ForeignKey(Wellinfo ,to_field='WellID', on_delete=models.CASCADE)
    TestMonth = models.ForeignKey(TestMonthM, on_delete=models.CASCADE)
    TestOIL   = models.DecimalField(max_digits=10, decimal_places=3,null=True, blank=True)

#条件 在我的真实数据中,我有一个 WellID,每个月只能测试一次。

那么如何设置一个条件呢?

所以在表 (TestPRODM) 中它可以有许多具有相同 WellID 但月份不同的条目 因此它可以有许多具有相同 TestMonth 但具有不同 WellID 的条目。

注意。 (TestPRODM) 表中没有同时具有相同 WellID 和 TestMonth 的条目。

更新后的帖子

    for i ,value in enumerate(PUITS):
        try:
            _, create = TestPRODM.objects.update_or_create(
                WellID= PUITS[i],
                TestMonth_id =obj.id,
                TestOIL =float(QHUILE[i]),
                )
            print('Saving', PUITS[i])
            AddedList +=[value]
        except:
            print('Passed', PUITS[i])
            pass

并且这个函数通过了模型中的所有限制并将所有数据保存在数据库中!

【问题讨论】:

    标签: django django-models relationship django-tables2 django-database


    【解决方案1】:

    您使WellIDTestMonth 的组合独一无二,并带有UniqueConstraint [wiki]

    class TestPRODM(models.Model):
        WellID = models.ForeignKey(
            Wellinfo,
            to_field='WellID',
            on_delete=models.CASCADE
        )
        TestMonth = models.ForeignKey(
            TestMonthM,
            on_delete=models.CASCADE
        )
        TestOIL = models.DecimalField(
            max_digits=10,
            decimal_places=3,
            null=True,
            blank=True
        )
    
        class Meta:
            constraints = [
                models.UniqueConstraint(
                    fields=['WellID', 'TestMonth'],
                    name='once_per_month'
                )
            ]

    之前可以使用unique_together [Django-doc]

    class TestPRODM(models.Model):
        WellID = models.ForeignKey(
            Wellinfo,
            to_field='WellID',
            on_delete=models.CASCADE
        )
        TestMonth = models.ForeignKey(
            TestMonthM,
            on_delete=models.CASCADE
        )
        TestOIL = models.DecimalField(
            max_digits=10,
            decimal_places=3,
            null=True,
            blank=True
        )
    
        class Meta:
            unique_together=[['WellID', 'TestMonth']]

    注意:通常Django模型中的字段名是用snake_case写的,而不是PerlCase,所以应该是:@ 987654332@ 而不是 TestMonth

    【讨论】:

    • 我无法使用 UniqueConstraint 我正在使用 Django==2.0,并且此方法仅适用于 2.2
    • @tibas:话虽如此,自 2019 年 8 月起不再支持 2.0:djangoproject.com/download
    • 谢谢,当我一一使用表单的管理员输入时,您的方法效果很好。
    • @tibas:您可以创建一个TabularInline,以便更方便地编辑m2m关系中的对象:docs.djangoproject.com/en/3.0/ref/contrib/admin/…
    • 我更新了我的帖子我正在使用views.py 中的一个函数从Excel 工作表中加载数据,它会毫无例外地加载所有数据
    猜你喜欢
    • 2017-01-24
    • 2019-07-30
    • 1970-01-01
    • 1970-01-01
    • 2016-06-16
    • 2019-09-19
    • 2011-02-15
    • 2016-09-22
    相关资源
    最近更新 更多