更新:
最初的JSON输出如下:
{ "id": 8
"user": "k"
"name": "new"
"born": "2021-12-06"
"body_colour": [ 2 ]
"eye_colour": [ 2 ]
"image": [ 1 ] }我将RatSeralizer改为:
class RatSerializer(FlexFieldsModelSerializer):
user = serializers.CharField(source='user.username')
body_colour = BodyColourSerializer(many=True)
eye_colour = EyeColourSerializer(many=True)
class Meta:
model = rat
exclude = ['bio']它将JSON输出更改为如下所示,这正是我想要的:
{
"id": 8,
"user": "k",
"body_colour": [
{
"name": "Fawn"
}
],
"eye_colour": [
{
"name": "Black"
}
],
"image": [
{
"name": "lineart",
"image": {
"small_square_crop": "http://localhost:8000/media/__sized__/images/lineart-crop-c0-5__0-5-50x50.PNG",
"thumbnail": "http://localhost:8000/media/__sized__/images/lineart-thumbnail-100x100.PNG",
"medium_square_crop": "http://localhost:8000/media/__sized__/images/lineart-crop-c0-5__0-5-400x400.PNG",
"full_size": "http://localhost:8000/media/images/lineart.PNG"
}
}
],
"name": "new",
"born": "2021-12-06"
}这正是我想要的,而不是数字,它显示的是完整的数据(所以在第一个JSON中,它是"body_colour": [ 2 ],现在它显示了体色的名称。上面写着"body_colour": [ { "name": "Fawn" } ]。但是,当我试图调用它时,我会得到这样的错误:
Error: Objects are not valid as a React child (found: object with keys {name}). If you meant to render a collection of children, use an array instead.
27 |
28 | componentDidMount() {
29 | RatStuff.getRats().then((res) => {
> 30 | this.setState({ rats: res.data });
| ^ 31 | });
32 | }因此,似乎它目前并不是作为一个数组被读取。
原始帖子:我使用的是React前端和Django后端的。我设法使它的用户可以添加老鼠到他们的帐户,然而,当我想获取有关老鼠的详细信息,详细信息被显示为数字,我假设详细信息的id?
下面是一个例子。当你看到其中一只老鼠的时候,你会得到这样的结果:
User: 12, Rat Name: newrat Rat Body colour: 3, Eye colour: 3所以正如你所看到的,你得到了id (?)除了老鼠的名字。它属于用户,其id为12,并创建了第3体颜色等。
这是我的模特:
class EyeColour(models.Model):
name = models.CharField(max_length=255)
def __str__(self):
return self.name
class BodyColour(models.Model):
name = models.CharField(max_length=255)
def __str__(self):
return self.name
class rat(models.Model):
name = models.CharField(max_length=132, null =True)
body_colour = models.ManyToManyField(BodyColour, related_name='bodycolour')
eye_colour = models.ManyToManyField(EyeColour, related_name='eyecolour')
user = models.ForeignKey(User, on_delete=models.CASCADE, null = True)
def __str__(self):
return self.name序列化程序:
class EyeColourSerializer(FlexFieldsModelSerializer):
class Meta:
model = EyeColour
fields = '__all__'
class BodyColourSerializer(FlexFieldsModelSerializer):
class Meta:
model = BodyColour
fields = '__all__'
class RatSerializer(FlexFieldsModelSerializer):
class Meta:
model = rat
# fields = '__all__'
exclude = ['bio']
# read_only_fields = ['eye_colour', 'body_cdolour']
expandable_fields = {
'EyeColour': ('accounts.EyeColourSerializer', {'many': False}),
'Image': ('accounts.ImageSerializer', {'many': False}),
}和意见:
class ratViewset(FlexFieldsMixin, ReadOnlyModelViewSet):
serializer_class = RatSerializer
queryset = rat.objects.all()最后,这是viewRats.jsx文件的一部分,您可以访问这个文件来查看每个鼠:
class viewRat extends Component {
constructor(props) {
super(props);
this.state = {
id: this.props.match.params.id,
rat: {},
};
}
componentDidMount() {
RatStuff.getRatById(this.state.id).then((res) => {
this.setState({ rat: res.data });
});
}
....
<div className="row">
<label> User: </label>
<div> {this.state.rat.user}</div>
</div>
<div className="row">
<label> Rat Name: </label>
<div> {this.state.rat.name}</div>
</div>
<div className="row">
<label> Rat Body colour: </label>
<div> {this.state.rat.body_colour}</div>
</div>
<div className="row">
<label> Eye colour: </label>
<div> {this.state.rat.eye_colour}</div>
</div>我对这东西很陌生。我在做什么,这使它显示为数字/每个事物的id?
发布于 2021-12-05 15:20:55
在序列化程序中,为用户添加一个带有source属性的序列化程序字段。对于许多字段,您必须设置many=True,这将返回所有相关序列化对象的列表
class EyeColourSerializer(FlexFieldsModelSerializer):
class Meta:
model = EyeColour
fields = '__all__'
class BodyColourSerializer(FlexFieldsModelSerializer):
class Meta:
model = BodyColour
fields = '__all__'
class RatSerializer(FlexFieldsModelSerializer):
user = serializers.CharField(source='user.username')
body_colour = BodyColourSerializer(many=True)
eye_colour = EyeColourSerializer(many=True)
class Meta:
model = rat
# fields = '__all__'
exclude = ['bio']
# read_only_fields = ['eye_colour', 'body_cdolour']https://stackoverflow.com/questions/70234898
复制相似问题