django - 如何通过 django rest api 中的一个序列化器发布多个模型数据

标签 django python-3.x api serialization django-rest-framework

我有两个模型,ContactUser:

class Contact(models.Model):
    name = models.CharField(max_length=50, blank=True)
    status = models.BooleanField(default=False)

class User(models.Model):
    username = models.CharField(max_length=50, blank=True)
    password = models.CharField(max_length=50, blank=True)
    contact_id = models.ForeignKey(Contact, on_delete=models.CASCADE, blank=True, null=True)

对于这两个模型,我有两个序列化器类:

class ContactSerializerModel(serializers.ModelSerializer):
    class Meta:
        model = Contact
        fields = ('name', 'status')

class UserSerializerModel(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('username', 'password','contact_id')

我想设计一个序列化器类,它采用 nameusernamepasswordstatus 字段。我想将它们作为键值对发布。首先将 namestatus 值保存在 Contact 模型中,然后使用 Contact 模型 id用户名密码保存在User表中。如何在 Django Rest API 中设计序列化器类?

最佳答案

您需要重写UserSerializerModel内的create方法:

class UserSerializerModel(serializers.ModelSerializer):
    contact_id = ContactSerializerModel()
    class Meta:
        model = User
        fields = (
          'username',
          'password',
          'contact_id'
        )

    def create(self, validated_data):
        contact_data = validated_data.pop('contact_id')  
        contact = Contact.objects.create(**contact_data)
        user = User.objects.create(contact_id=contact, **validated_data)
        return user

查看详情here .

关于django - 如何通过 django rest api 中的一个序列化器发布多个模型数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48050449/

相关文章:

python - 重写 haystack build_page() 函数

python-3.x - Python 3-使用sys.setrecursionlimit()

Python: "Self"是不是没有定义?

php - Twitch API redirect_mismatch

mysql - Django、nginx 和 uWSGI 缓存结果直到 uWSGI/MySQL 重启

django - 初始化外键下拉菜单

rest - 如何将数组或枚举中的枚举值定义为映射属性中的键?

c# - ASP.NET - 如何从 Swagger Restful API 生成代理类

django - 导入错误 : No module named '_sqlite3' in python3. 3

python - glsl 解析器使用 pyparsing 给出 AttributeErrors