Как добавить два автогенерируемых поля в одну модель в Django

Мне нужно создать два автогенерируемых поля: 1-е поле - ID, а другое - позиция, которая эквивалентна id или, можно сказать, это тоже автогенерируемое поле в модели.

вот код, в который я интегрирую:

class DeviceControlPolicy(models.Model):
    vendor_id = models.ForeignKey(Vendor, on_delete=models.CASCADE)
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=100)
    description = models.CharField(max_length=1000)
    # schedule_id = models.ForeignKey(ScheduleClassificationGroup, on_delete=models.CASCADE, null=True, default=None)
    usb_storage_device = models.CharField(max_length=10, default="allow")
    cd_dvd = models.CharField(max_length=10, default="allow")
    portable = models.CharField(max_length=10, default="allow")
    wifi = models.CharField(max_length=10, default="allow")
    bluetooth = models.CharField(max_length=10, default="allow")
    webcam = models.CharField(max_length=10, default="allow")
    serial_port = models.CharField(max_length=10, default="allow")
    usb_port = models.CharField(max_length=10, default="allow")
    local_printer = models.CharField(max_length=10, default="allow")
    network_share = models.CharField(max_length=10, default="allow")
    card_reader = models.CharField(max_length=10, default="allow")
    unknown_device = models.CharField(max_length=10, default="allow")
    position = model.[what do i write here to make it auto generated or equal to id]

    def __str__(self):
        return self.name

пожалуйста, помогите мне решить эту проблему.

Определите метод save для установки начального значения position:

class DeviceControlPolicy(models.Model):
    vendor_id = models.ForeignKey(Vendor, on_delete=models.CASCADE)
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=100)
    description = models.CharField(max_length=1000)
    # schedule_id = models.ForeignKey(ScheduleClassificationGroup, on_delete=models.CASCADE, null=True, default=None)
    usb_storage_device = models.CharField(max_length=10, default="allow")
    cd_dvd = models.CharField(max_length=10, default="allow")
    portable = models.CharField(max_length=10, default="allow")
    wifi = models.CharField(max_length=10, default="allow")
    bluetooth = models.CharField(max_length=10, default="allow")
    webcam = models.CharField(max_length=10, default="allow")
    serial_port = models.CharField(max_length=10, default="allow")
    usb_port = models.CharField(max_length=10, default="allow")
    local_printer = models.CharField(max_length=10, default="allow")
    network_share = models.CharField(max_length=10, default="allow")
    card_reader = models.CharField(max_length=10, default="allow")
    unknown_device = models.CharField(max_length=10, default="allow")
    position = models.IntegerField()

    def __str__(self):
        return self.name

    def save(self, *args, **kwargs):
       if self._state.adding:
          self.position = self.id
   
       super().save(*args, **kwargs)
Вернуться на верх