为了账号安全,请及时绑定邮箱和手机立即绑定

如何在一个DRF端点中保存三个相关模型?

如何在一个DRF端点中保存三个相关模型?

弑天下 2022-08-11 18:03:10
我有4个相关的模型,我需要实现该功能,以便在一个帖子查询中在数据库中一致地创建这些模型的实例。为此,我使用 APIView 类 post 方法的重写。模型class VendorContacts(models.Model):    contact_id = models.AutoField(primary_key=True)    vendor = models.OneToOneField('Vendors', on_delete=models.CASCADE)    contact_name = models.CharField(max_length=45, blank=True)    phone = models.CharField(max_length=45, blank=True)    email = models.CharField(max_length=80, blank=True, unique=True)    class Meta:        db_table = 'vendor_contacts'class VendorModuleNames(models.Model):    vendor = models.OneToOneField('Vendors', on_delete=models.CASCADE, primary_key=True)    module = models.ForeignKey(Modules, models.DO_NOTHING)    timestamp = models.DateTimeField(auto_now=True)    class Meta:        db_table = 'vendor_module_names'        unique_together = (('vendor', 'module'),)class Vendors(models.Model):    COUNTRY_CHOICES = tuple(COUNTRIES)    vendorid = models.AutoField(primary_key=True)    vendor_name = models.CharField(max_length=45, unique=True)    country = models.CharField(max_length=45, choices=COUNTRY_CHOICES)    nda = models.DateField(blank=True, null=True)    user_id = models.ForeignKey('c_users.CustomUser', on_delete=models.PROTECT)    timestamp = models.DateTimeField(auto_now_add=True)    class Meta:        db_table = 'vendors'        unique_together = (('vendorid', 'timestamp'),)class Modules(models.Model):    MODULES_NAME =tuple(MODULES)    mid = models.AutoField(primary_key=True)    module_name = models.CharField(max_length=50, choices=MODULES_NAME)    active = models.BooleanField(default=True)    timestamp = models.DateTimeField(auto_now=True)    class Meta:        db_table = 'modules'        unique_together = (('mid', 'timestamp'),)serializer.pyclass VendorsSerializer(serializers.ModelSerializer):    class Meta:        model = Vendors        fields = ('vendor_name',                  'country',                  'nda',)保存一个供应商模型没有问题,但我无法想象如何在单个请求中保存所有相关模型的级联。
查看完整描述

1 回答

?
青春有我

TA贡献1784条经验 获得超8个赞

save返回新保存的对象,然后可以将该对象传递到后续方法中:save()


vendor = vendor_serializer.save(user_id=request.user)

module = module_serializer.save()

vendor_module = vendor_modules_serializer.save(module=module, vendor=vendor)

vendor_contact = vendor_contact_serializer.save(vendor=vendor)


查看完整回答
反对 回复 2022-08-11
  • 1 回答
  • 0 关注
  • 92 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号