os.system('rar a <файл.rar> <файл_который_нужно_добавить_в_архив>')
parent_categories= models.ManyToManyField('ParentCategory', related_name='modules', through='ModuleParentCategory')
class ModuleParentCategory(models.Model):
module = models.ForeignKey(Module, on_delete=models.CASCADE)
parent_category = models.ForeignKey(ParentCategory, on_delete=models.CASCADE)
primary = models.BooleanField(default=False)
class VendorManagementUpdateSerializer(serializers.ModelSerializer):
...
parent = VendorToFrontSerializer()
...
class Meta:
model = Vendors
fields = (..., 'parent', ...)
def create(self, validated_data, **kwargs):
parent = validated_data.pop('parent')
instance = super().create(validated_data, **kwargs)
parent_serializer = VendorToFrontSerializer(data=parent)
if parent_serializer.is_valid():
instance.parent = parent_serializer.save()
return instance
def update(self, instance, validated_data, **kwargs):
# ...точно так же, только нужно будет уже имеющийся объект обновить
class Vendor(models.Model):
...
class Module(models.Model):
MODULES_NAME = (
("Sourcing", "Sourcing"), ("SA", "SA"),
("SXM", "SXM"), ("CLM", "CLM"),
...
)
name = models.CharField(max_length=50, choices=MODULES_NAME)
is_active = models.BooleanField(default=True)
class VendorModule(models.Model):
vendor = models.ForeignKey(Vendor, on_delete=models.CASCADE)
module = models.ForeignKey(Module, on_delete=models.CASCADE)
is_active = models.BooleanField(default=True)
info1 = models.TextField(max_length=500)
info2 = models.TextField(max_length=500)
VendorModule
— фактически это связь многие-ко-многим с возможностью сохранения дополнительной информации. Назначение модели Element
непонятно, поэтому дополнительная информация убрана в VendorModule
. Но если вы считаете, что этого недостаточно, то можно сделать так:class Element(models.Model):
vendormodule = models.ForeignKey(VendorModule, on_delete=models.CASCADE)
info1 = models.TextField(max_length=500)
info2 = models.TextField(max_length=500)