在模型上运行objects.all()时的TypeError

Sah*_*and 1 python django

这是我的模特:

class Workout(models.Model):

    datetime = models.DateTimeField()
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    lifts = fields.LiftsField(null=True)
    cardios = fields.CardiosField(null=True)

    def __str__(self):
        return str(self.datetime)+" "+self.user.email

    __repr__ = __str__
Run Code Online (Sandbox Code Playgroud)

而我正试图从django shell做到这一点:

(workout) Sahands-MBP:workout sahandzarrinkoub$ shell
Python 3.6.2 (default, Jul 17 2017, 16:44:45) 
[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.42)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from workoutcal.models import Workout
>>> Workout.objects.all()
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/db/models/query.py", line 226, in __repr__
    data = list(self[:REPR_OUTPUT_SIZE + 1])
  File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/db/models/query.py", line 250, in __iter__
    self._fetch_all()
  File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/db/models/query.py", line 1118, in _fetch_all
    self._result_cache = list(self._iterable_class(self))
  File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/db/models/query.py", line 62, in __iter__
    for row in compiler.results_iter(results):
  File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 842, in results_iter
    row = self.apply_converters(row, converters)
  File "/Users/sahandzarrinkoub/Documents/Programming/Web/Django/workout/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 827, in apply_converters
    value = converter(value, expression, self.connection, self.query.context)
TypeError: from_db_value() takes 4 positional arguments but 5 were given
Run Code Online (Sandbox Code Playgroud)

这个错误背后的解释是什么?我没有在任何地方发出任何论据,所以据我所知,错误必须在于我对模型的声明,但我看不出我犯的错误.感谢您的帮助.

编辑:这是包含我的自定义字段的fields.py:

def parse_lifts(lifts_string):
    """Takes a string of json and turns it into a Lifts object"""
    series = json.loads(lifts_string)
    serie_objects = [models.LiftSerie(serie["liftname"], serie["setlist"]) for serie in series]
    return models.Lifts(serie_objects)

def parse_cardios(cardios_string):
    """Takes a string of json and turns it into a Cardios Object"""
    series = json.loads(cardios_string)
    serie_objects = [models.CardioSerie(serie["cardioname"], serie["duration"]) for serie in series]

class LiftsField(JSONField):
    """Field representing a models.Lifts object"""

    def from_db_value(self, value, expression, connection):
        if value is None:
            return value
        return parse_lifts(value)

    def to_python(self, value):
        if isinstance(value, models.Lifts):
            return value
        if value is None:
            return value
        return parse_lifts(value)

    def get_prep_value(self, value):
        if not value:
            return value
        lifts_pre_json = [serie_object.pre_json() for serie_object in value.series]
        return json.dumps(lifts_pre_json)

class CardiosField(JSONField):
    """Field representing a models.Cardios object"""

    def from_db_value(self, value, expression, connection):
        if value is None:
            return value
        return parse_cardios(value)

    def to_python(self, value):
        if isinstance(value, models.Cardios):
            return value
        if value is None:
            return value
        return parse_cardios(value)

    def get_prep_value(self, value):
        if value == None:
            return value
        cardios_pre_json = [serie_object.pre_json() for serie_object in value.series]
        return json.dumps(cardios_pre_json)
Run Code Online (Sandbox Code Playgroud)

Dan*_*man 6

您正在使用Django 2.0的文档,但似乎正在运行Django 1.11或更早版本.在该版本中,from_db_value需要额外的参数,context- 请参阅文档.

此参数未使用,已在更高版本中删除.