这是我的模型:
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)
您使用的文档来自Django 2.0,但似乎运行的是Django 1.11或更早版本。在那个版本中,
from_db_value
需要一个额外的参数,context
-请参见the docs。你知道吗此参数未使用,已在以后的版本中删除。你知道吗
相关问题 更多 >
编程相关推荐