我有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)
添加回答
举报
0/150
提交
取消