Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在django模型序列化程序中显示新字段?_Django_Django Models_Django Rest Framework_Django Serializer - Fatal编程技术网

如何在django模型序列化程序中显示新字段?

如何在django模型序列化程序中显示新字段?,django,django-models,django-rest-framework,django-serializer,Django,Django Models,Django Rest Framework,Django Serializer,我创建了一个不同的模型序列化程序,如LocationDetailSerializer、ListingDetialSerializer等等。 他们的每一个模型都与PropertySerializer的模型共享一对一的关系 属性模型: class Property(models.Model): # ? Relationships user = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.CASCADE )

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

属性模型:

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)
PropertySerializer:

class PropertySerializer(serializers.ModelSerializer):

# location_detail = LocationDetailSerializer()
# listing_detial = ListingDetialSerializer()
.
.
.
.
.
class Meta:
    model = Property
    fields = "__all__"
PropertySerializer中,我还需要诸如:location\u detail、listing\u details.之类的字段,以便可以将其与视图一起传递


如何做到这一点?

我就是这样做到的:

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",
    
},
}

添加您的models@JPGModels AddedHello,您的问题不是很清楚,您的模型中的位置详细信息和列表详细信息来自哪里?什么是LocationDetailSerializer&&LocationDetailSerializer?@BriseAlloches感谢您的响应,实际上我已经将大属性模型分解为不同的模型。这些模型中的所有列实际上都应该是属性模型的一部分。我认为创建不同的模型,如LocationDetail等,会使字段的组织变得容易。基于这些独立的模型,创建了LocationDetailSerializer、LocationDetailSerializer等序列化程序。你认为打破这些模式是个好主意吗?如果是,那么如何用一个属性序列化程序从不同的序列化程序填充这些字段呢?这里很难给你一个明确的答案。如果你认为它们应该被视为不同的对象,因为你将单独操纵它们,那么是的,这是一个很好的设计,如果不是,那么可能把它们都放在同一个模型中。对于在DRF中序列化关系,您应该首先看一看,如果这没有帮助,请准确描述您期望的序列化程序的行为。