我无法从 profileserializer 的 create 方法中获取序列化响应,它成功创建了对象,但是在返回序列化响应时,它尝试访问 m2m 字段的属性而不是 throughmodel 并显示以下错误:
<块引用>序列化器字段可能命名不正确,并且与 State
实例上的任何属性或键都不匹配。
原始异常文本为:'State' 对象没有属性 'state'。
模型和序列化器的详细信息如下。
class State(CommonModel):
name = models.CharField(max_length=100)
code = models.CharField(max_length=2)
def __str__(self):
return str(self.name)
class Profile(CommonModel):
states = models.ManyToManyField(State, related_name=“profile_states,
through='ProfileStates',
through_fields=('profile', 'state', 'license_type'), blank=True)
class ProfileStates(models.Model):
profile = models.ForeignKey(Profile, on_delete=models.CASCADE)
state = models.ForeignKey(State, on_delete=models.CASCADE)
license_type = models.ForeignKey(LicenseType, on_delete=models.CASCADE, null=True)
class Meta:
db_table = "app_name_profile_licensed_states"
unique_together = ("profile", "state", 'license_type')
class ProfileStatesSerializer(serializers.ModelSerializer):
class Meta:
model = ProfileStates
fields = ("state", "license_type")
class ProfileSerializer(serialisers.ModelSerializer):
states = ProfileStatesSerializer(models.ProfileStates.objects.all(),
many=True)
def create():
return instance
我尝试在序列化程序中添加 related_name 并从必填字段中删除状态,例如:
class ProfileSerializer(serialisers.ModelSerializer):
profile_states = ProfileStatesSerializer(models.ProfileStates.objects.all(),
many=True)
def create():
return instance
def get_field_names(self, declared_fields, info):
expanded_fields = super(ProfileSerializer, self).get_field_names(declared_fields, info)
if getattr(self.Meta, 'extra_fields', None):
return expanded_fields + self.Meta.extra_fields
else:
return expanded_fields
class Meta:
model = models.Profile
fields = ("__all__")
extra_fields = [‘profile_states']
extra_kwargs = {'states': {'required': False}}
它也成功创建了对象,但它显示的不是序列化响应
<块引用>django_1 | AttributeError:尝试获取序列化程序 profile_states
上的字段 ProfileSerializer
的值时出现 AttributeError。