私は会社を持つアプリケーションを持っていますが、この会社は0か複数のアドレスを持つことができます。企業はアドレスを持つことができる唯一の「モデル」ではありません。これを達成するために、私はContentTypesを使用します。Django Rest Framework:ContentTypeでネストされたシリアライズを行う方法
models.py
class Company(models.Model):
''' models a company in the system. '''
number = models.CharField(_('Number'), unique=True, max_length=20)
name = models.CharField(_('Name'), max_length=100)
active = models.BooleanField(_('Active'), default=True)
def _get_addresses(self):
'''
'''
contentType = ContentType.objects.get(
model=self.__class__.__name__.lower()
)
try:
addresses = Address.objects.get(
actor_type=contentType, actor_id=self.id
)
except Address.DoesNotExist:
addresses = []
return addresses
addresses = property(_get_addresses)
class Address(Auditable):
''' models an address '''
actor_type = models.ForeignKey(ContentType)
actor_id = models.PositiveIntegerField()
actor_object = fields.GenericForeignKey('actor_type', 'actor_id')
_type = models.CharField(
_('Address Type'),
max_length=10,
choices=sorted(TYPES.items())
)
active = models.BooleanField(default=True)
address1 = models.CharField(_('Address 1'), max_length=50)
address2 = models.CharField(
_('Address 2'),
max_length=50,
...
このように、私はまた、Profileモデルを持っている可能性があり、私はプロファイルに複数のアドレスをリンクすることができます。しかし、シリアライザを実装しようとすると、私の問題が発生します。
Serializers.py
class AddressSerializer(serializers.ModelSerializer):
class Meta:
model = Address
fields = (
'_type',
'address1',
'address2',
'address3',
'country',
'state',
'city'
)
class CompanySerializer(serializers.ModelSerializer):
addresses = AddressSerializer(required=False, many=True)
class Meta:
model = Company
fields = (
'number',
'name',
'addresses'
)
この実装は、私にこのerrorを与えます。それはアドレスモデル(それは理にかなっています)を反復することはできないと言いますが、自分のアドレスを反復可能にする方法がわかりません。
私は、会社だけでなく、ネストされた住所でもCRUD操作を実行する必要があります。
これについてのご意見はありますか?
、そこにある、ことができますか? – zaidfazil
@FazilZaid 'Company'から' Address'への関係はありません( 'addresses'プロパティを除いて、models.pyに追加したばかりです)、' Address'から 'Company'への関係を得ることができます。他のモデルに – m4rk4l
しかし、一般的な外部キーは、シリアル化を行うためのフィールドとしてアクセスできません... – zaidfazil