运行mod时,使用对象的all()时出现TypeError错误

2024-05-26 11:55:07 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的模型:

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__

我试着从django的外壳上做这个:

(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

这个错误背后有什么解释?我还没有发送任何参数到任何地方,据我所知,错误一定在我的模型声明中,但我看不出我犯了什么错误。感谢你的帮助。你知道吗

编辑:这里是字段.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)

Tags: djangoinselfjsondbreturnifvalue
1条回答
网友
1楼 · 发布于 2024-05-26 11:55:07

您使用的文档来自Django 2.0,但似乎运行的是Django 1.11或更早版本。在那个版本中,from_db_value需要一个额外的参数,context-请参见the docs。你知道吗

此参数未使用,已在以后的版本中删除。你知道吗

相关问题 更多 >