首页 > 解决方案 > 如何在 django 模型序列化器中显示一个新字段?

问题描述

我创建了一个不同的模型序列化器,如 LocationDetailSerializer、ListingDetialSerializer 等。他们的每个模型都与 PropertySerializer 的模型共享 OneToOne 关系。

物业模型:

class Property(models.Model):

# ? Relationships

user = models.ForeignKey(
    settings.AUTH_USER_MODEL, on_delete=models.CASCADE
)

# ? Fields
property_unique_hash_id = models.UUIDField(
    default=uuid.uuid4, editable=False
)
.
.
.
.

created = models.DateTimeField(auto_now_add=True, editable=False)
last_updated = models.DateTimeField(auto_now=True, editable=False)

def __str__(self):
    return "Property " + str(self.pk)

上市详细型号:

class ListingDetial(models.Model):

# ? Relationships
property = models.OneToOneField("properties.Property", 
           on_delete=models.CASCADE)


listing_property_type = models.PositiveSmallIntegerField(
    choices=choices.LISTING_PROPERTY_TYPE,
    default=choices.LISTING_PROPERTY_TYPE.single_family_detached,
)
.
.
.
created = models.DateTimeField(auto_now_add=True, editable=False)
last_updated = models.DateTimeField(auto_now=True, editable=False)

def __str__(self):
    return "Listing Detail" + str(self.pk)

属性序列化器:

class PropertySerializer(serializers.ModelSerializer):

# location_detail = LocationDetailSerializer()
# listing_detial = ListingDetialSerializer()
.
.
.
.
.
class Meta:
    model = Property
    fields = "__all__"

PropertySerializer中,我还想要诸如 location_detail、listing_details 之类的字段,以便它可以与视图一起传递。

如何做到这一点?

标签: djangodjango-modelsdjango-rest-frameworkdjango-serializer

解决方案


这就是我让它工作的方式:

class PropertySerializer(serializers.ModelSerializer):

locationdetail = LocationDetailSerializer()
listingdetial = ListingDetialSerializer()
.
.
class Meta:
    model = Property
    fields = "__all__"

这将以以下方式给出 json:

{
"id": 3,
"locationdetail": {
    "id": 3,
    "property": 3
    .
    .
    "created": "2021-01-03T01:53:58.987287Z",
    "last_updated": "2021-01-03T01:53:58.987287Z",


},
"listingdetial": {
    "id": 3,
    "property": 3
    .
    .
    "created": "2021-01-03T01:53:58.873135Z",
    "last_updated": "2021-01-03T01:53:58.873135Z",
    
},
}

推荐阅读