1
我正在嘗試獲取特定實例的關係和關係。我需要獲取相關對象ID和關係信息。Django Rest框架通過無法獲取穿透模型自引用多對多
我的模型都基於關係從http://charlesleifer.com/blog/self-referencing-many-many-through/
1.8.3的Django Django的和REST框架3.3.3
models.py
class Person(models.Model):
name = models.CharField(max_length=100)
relationships = models.ManyToManyField('self', through='Relationship',
symmetrical=False,
related_name='related_to')
class RelationshipType(models.Model):
name = models.CharField(max_length=255)
class Relationship(models.Model):
from_person = models.ForeignKey(Person, related_name='from_people')
to_person = models.ForeignKey(Person, related_name='to_people')
relationship_type = models.ForeignKey(RelationshipType)
serializers.py
class RelationshipTypeSerializer(serializers.ModelSerializer):
class Meta:
model = models.RelationshipType
class RelationshipSerializer(serializers.ModelSerializer):
relationship_type = RelationshipTypeSerializer()
to_person_id = serializers.ReadOnlyField(source='to_person.id')
to_person_name = serializers.ReadOnlyField(source='to_person.name')
class Meta:
model = models.Relationship
fields = (
'id',
'relationship_type',
'to_person_id',
'to_person_name',
)
class PersonSerializer(serializers.ModelSerializer):
annotated_relationships = RelationshipSerializer(source='relationships', many=True)
class Meta:
model = models.Person
fields = (
"id",
"name",
'annotated_relationships'
)
我目前收到這樣的內容:
{
"id": 88,
"name": "Person 88",
"annotated_relationships": [
{
"id": 128
},
{
"id": 130
}
]
}
我想是這樣的,雖然格式並不需要是這樣,只要我能得到的關係的信息:
{
"id": 88,
"name": "Person 88",
"annotated_relationships": [
{
"id": 128,
"relationship_type":
{
"name": "friend",
},
"to_person_id": 34,
"to_person_name": "Jeremy",
},
{
"id": 130,
"relationship_type":
{
"name": "enemy",
},
"to_person_id": 73,
"to_person_name": "Trisha",
}
]
}
我認爲你需要定義一個方法def'get_relations(self): return models.Relationship.objects.get(from_person = self)'然後做'annotated_relationships = RelationshipSerializer(source = get_relations,many = True)' –
謝謝!如果你想讓這個答案,我會接受它。 – TheCaptan
謝謝!作爲回答添加回答 –