Django创建一个数据库条目并更新这些字段

时间:2016-08-17 09:29:24

标签: django

由于某种原因,需要有一个数据库表,其中包含要更新的字段。这些字段为attemptsuccessfailure。我认为使用Django ORM会更好,但这需要成为......

问题是,我得到一个包含数据的数组数组,我需要解析。当数据库中没有该字段的条目时,我该怎么办?

models.py

class SomeData(models.Model):
    attempt = models.PositiveIntegerField(null=True)
    success = models.PositiveIntegerField(null=True)
    failure = models.PositiveIntegerField(null=True)

views.py

    class PutSomeData(CreateOrUpdateAPIView):
        model = OtherModel

    def post(self, *args, **kwargs):
        data = self.request.data

        for k in data:
            entry = OtherModel(
                field1=k[0],
                field2=k[1],
                field3=k[2]
            )
            entry.save()
            count = SomeData.objects.all()
            if not count:
                attempt, success, failure = 0, 0, 0
                data = SomeData(
                    attempt=attempt,
                    success=success,
                    failure=failure
                )
                data.save()
            else:
                data = SomeData.objects.last()
                if 'attempt' in k[2]:
                    data.attempt + 1
                elif 'success' in k[2]:
                    data.success + 1
                else:
                    data.failure + 1
                data.save()

我现在正在考虑这样的事情,但这当然是一件愚蠢的事情,除此之外,它总会跳过数组中的第一个并因此是不准确的。这只是我现在所拥有的,但我不知道如何让这更好,更优雅。有什么想法吗?

编辑:更清楚一点:问题是现在没有初始字段,否则我可以像我一样增加字段,但现在我必须查看是否已有条目(它将否则抱怨NoneType没有“尝试过”(

1 个答案:

答案 0 :(得分:0)

您可以使用初始数据创建迁移,这样您就可以确保该条目存在。

另外,对于一个全局值只有一行的表,我建议使用包含行keyvalue(或类似)的表,以便在需要时添加新的全局值,您不需要进行架构迁移。