DRFの中間モデルからのフィールドへのアクセスに苦労しています。Django Rest Frameworkの中間モデルからのフィールドへのアクセス
のは、関連のモデルを見てみましょう:
class School(models.Model):
created = models.DateTimeField(auto_now_add=True)
name = models.CharField(max_length=50, verbose_name=_(u'Name'))
staff_order = models.ManyToManyField(settings.AUTH_USER_MODEL, verbose_name=_(u'Staff ordering'), through='StaffOrder', related_name='school_staff_order')
class User(AbstractUser):
phone = models.CharField(max_length=20, blank=True, null=True)
address = models.CharField(max_length=150, blank=True, null=True)
about_me = models.CharField(max_length=200, blank=True, null=True)
REQUIRED_FIELDS = ['email']
def __unicode__(self):
return u'{0}'.format(self.username)
class StaffOrder(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL)
school = models.ForeignKey(School)
order = models.PositiveSmallIntegerField(default=0, verbose_name=_(u'Staff ordering for this school'))
class Meta:
verbose_name_plural = _(u'Staff ordering')
は今、私は期待していどのようなユーザー(StaffSerializer)のためのクエリセットを返すときにStaffOrderから順番フィールドを読み取ることができることです。ここでシリアライザされています
class StaffRoleSerializer(serializers.ModelSerializer):
class Meta:
model = StaffOrder
fields = (
'order',
)
class StaffSerializer(serializers.ModelSerializer):
username = serializers.CharField(max_length=75, required=True)
email = serializers.CharField(max_length=75, required=True)
order = StaffRoleSerializer(source='school_staff_order')
class Meta:
model = User
StaffSerializerために返され、何がこのユーザーに関連StaffOrderモデルからではなく、注文フィールドで、マネージャです。私もシリアライザからこの値を書くことができるようにしてみたいが、私はビューセットでそれを行うことができますが、私
[
{
"username": "Denise",
"email": "[email protected]",
"order": 9
},
{
"username": "Ina",
"email": "[email protected]",
"order": 4
}
]
:A JSONはスタッフのための応答がこのようなものになるだろうと予想
シリアライザ自体でこの値を読む必要があります...私はここで何が欠けているのか考えていますか?
あなたの名前はとても混乱しています。注文フィールドにsource = school_staff_orderがあるのはなぜですか?それは何を参照していますか? –
@ zaphod100.10これは、シリアライザで中間モデルをマッピングする際の要件と思われます。これは、School.staff_order – AlejandroVK
の関連する名前にマップされます。フィールド 'staff_order'は、学校モデル上で' users'または 'staff'という名前にしてはなりませんか?それはユーザーとの関係が多いからです。そして、あなたが望んでいるjsonの例を挙げることができますか? –