DRF-多对多通过模型序列化问题

时间:2021-02-11 13:50:50

标签: python-3.x django serialization django-rest-framework has-many-through

我无法从 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。

0 个答案:

没有答案
相关问题