0

当我尝试在 Django 的管理中将 load_data 加载到数据库时,diango 中的持续时间字段存在问题。

在models.py中:

class Sport(models.Model):
    name = models.CharField(max_length=32)
    description = models.TextField(null = True, blank = True)
    duration = models.DurationField(default=3600.0)
    capacity = models.SmallIntegerField(null=True)

    def __str__(self):
        return self.name

管理中的 load_data.py:

def populate():

Sport.objects.update_or_create(name="KICKBOXING", description="Dyscyplina sportowa  w której walczy się stosując zarówno bokserskie ciosy pięścią, jak i kopnięcia. Sport rozwijający w sposób holistyczny umiejętności fizyczne takie jak: siła, szybkość, wytrzymałość, gibkość, poczucie rytmu. Dodatkowo rozwijający cechy psychiczne m.in.: panowanie nad stresem, poczucie własnej wartości, czy pewność siebie."
,duration= 3000000000, capacity = 10)
Sport.objects.update_or_create(name="BODYPUMP", description="To oryginalny program ćwiczeń z wykorzystaniem sztangi, który wzmocni i ukształtuje Twoje mięśnie."
,duration= 3600000000, capacity = 15)
Sport.objects.update_or_create(name="CROSS CAGE", description="Zajęcia o bardzo wysokiej intensywności oparte na treningu funkcjonalnym. Mają na celu ukształtowanie sylwetki jak również wypracowanie szeroko pojętej sprawności fizycznej."
,duration= 3600000000, capacity = 20)
Sport.objects.update_or_create(name="BODYCOMBAT", description="To intensywny trening cardio, podczas którego uwolnisz swoje emocje! Cały program zainspirowany jest sztukami walki tj. karate, taekwondo, boks, tai chi czy muay thai."
,duration= 3600000000, capacity = 20)
Sport.objects.update_or_create(name="STRETCHING", description="Zestaw ćwiczeń rozluźniająco-rozciągających wszystkie grupy mięśniowe. Zajęcia odbywają się przy relaksującej, nastrojowej muzyce. Ćwiczenia zwiększają elastyczność mięśni i gibkość ciała. Zajęcia gwarantują relaks i odprężenie.",duration=3000000000, capacity=20)


class Command(BaseCommand):
    help = 'Initialize database'

        def add_arguments(self, parser):
        parser.add_argument('--add-sports',
                        action='store_true',
                        dest='add-sports',
                        default=False,
                        help='Insert sport data')



    def handle(self, *args, **options):
        start = timezone.now()


        if options['add-sports']:# or update_all:
            print("Loading sports...")
            populate()

        end = timezone.now()
        print(end - start)

在命令之后:python3 manage.py load_data --add-sports 我得到了这个错误:

文件“/home/hubert/workspace/wirtualne_srodowoska/env1/lib/python3.5/site-packages/django/db/models/fields/init .py ”,第 1640 行,在 get_db_prep_value return int(round(value.total_seconds( ) * 1000000)) AttributeError: 'int' 对象没有属性 'total_seconds'

谁能帮我这个?如何修改它?当我将 duration=3000000000 更改为 duration=3000.0 时,我得到: AttributeError: 'float' object has no attribute 'total_seconds'

没有持续时间字段的所有其他模型都可以正常工作:/

4

1 回答 1

0

DurationField 的定义:使用 timedelta 对象而不是 int 或 float 值

class DurationField(Field):
    """
    Store timedelta objects.

    Use interval on PostgreSQL, INTERVAL DAY TO SECOND on Oracle, and bigint
    of microseconds on other databases.
    """
    empty_strings_allowed = False
    default_error_messages = {
        'invalid': _("'%(value)s' value has an invalid format. It must be in "
                 "[DD] [HH:[MM:]]ss[.uuuuuu] format.")
    }
    description = _("Duration")
于 2018-03-09T03:38:18.347 回答