@gasman 帮助我的上一个主题, 所以我有一个模型类成分,例如:
@register_model_chooser
class Ingredient(models.Model):
name = models.CharField(max_length=255)
def __str__(self):
return self.name
为了在 API 中表示这一点,我创建了这个类:
class IngredientChooserBlock(ModelChooserBlock):
def get_api_representation(self, value, context=None):
if value:
return {
'name': value.name,
}
然后我有另一个使用类的模型IngredientChooserBlock
类:
@register_model_chooser
class Menu(models.Model):
ingredient = StreamField([
('zutaten', IngredientChooserBlock('kitchen.Ingredient')) ],
null=True, verbose_name='', blank=True)
def __str__(self):
return self.title
因为我ingredient
在我的 API 中需要这个,所以我创建了相同的模型类来覆盖get_api_representation
:
class WeekChooserBlock(ModelChooserBlock):
def get_api_representation(self, value, context=None):
if value:
return {
'ingredients': value.ingredient,
}
最后在我的主要模型类中,我尝试使用WeekChooserBlock
它kitchen.Menu
作为参数,如下所示:
class Week(models.Model):
dishes_sp = StreamField([
('menu', WeekChooserBlock('kitchen.Menu')) ],
null=True, verbose_name='', blank=True)
问题是它在 DRF 中打印出一个错误,如下所示:
Object of type 'StreamValue' is not JSON serializable
不想提出太大的问题,但为了更清楚起见,我实际上在我的Menu
班级中有另一个对象,例如:
class Menu(models.Model):
title = models.CharField(max_length=255)
image = models.URLField(blank=True, null=True)
price = models.FloatField(blank=True, null=True, max_length=255)
ingredient = StreamField([
('zutaten', IngredientChooserBlock('kitchen.Ingredient')) ],
null=True, verbose_name='', blank=True)
steps = StreamField([
('Schritt', TextBlock())
], null=True, verbose_name='Vorbereitungsschritte', blank=True)
我也试图代表他们。但是只有在我尝试输出时才会显示错误StreamField
class WeekChooserBlock(ModelChooserBlock):
def get_api_representation(self, value, context=None):
if value:
return {
'title': value.title,
'picture': value.image,
'price': value.price,
'ingredients': value.ingredient,
'steps': value.steps
}
谢谢你的支持!