0

次の行に沿って、別のフィールドに基づいてデフォルトを作成しようとしています。

class Track(models.Model):
    distance = models.FloatField()
    timeout = models.PositiveSmallIntegerField(default=int(distance * 2))

ただし、これはスローしますTypeError: unsupported operand type(s) for *: 'FloatField' and 'int'

FWIW、私はこれを無駄にしようとしました:

class Track(models.Model):
    distance = models.FloatField()
    timeout = models.PositiveSmallIntegerField()

    def save(self, *args, **kwargs):
        if (self.timeout is None):
            self.timeout = int(self.distance * 2)
            super(Track, self).save(*args, **kwargs)

しかし、それは投げていましたTypeError: 'int' object is not iterable

4

1 に答える 1

0

おっと、スタック トレースをもっと詳しく読むべきだったのですが、問題は実際のコードではなく、単体テストのバグであることが判明しました。

def test_timeout_defaults_to_twice_distance_when_none(self):
    Track.objects.create(name='Test Track', distance=10)
    track = Track.objects.get(1) # Should've been get(id=1)
    self.assertEqual(20, track.timeout)

別の Python と Django 初心者が同じことをした場合に備えて、この質問は削除しません :)

于 2013-07-24T10:55:48.980 に答える