Estoy tratando de crear un campo entero (topic_id) igual al valor de clave primaria (id) generado por Django.

class Topic(models.Model):
    text = models.CharField(max_length=200)
    date_added = models.DateTimeField(auto_now_add=True)
    topic_id = ?????

Gracias por tu tiempo.

0
joseph 9 sep. 2018 a las 08:40

3 respuestas

La mejor respuesta

Declare como método y use el decorador @property para devolverlo como una propiedad real.

class Topic(models.Model):
    text = models.CharField(max_length=200)
    date_added = models.DateTimeField(auto_now_add=True)
    @property
    def topic_id(self):
        return self.id
1
gurpreet singh chahal 9 sep. 2018 a las 06:24

Puede hacer que topic_id sea un alias para id con la solución aquí:

class AliasField(models.Field):
    def contribute_to_class(self, cls, name, private_only=False):
        super(AliasField, self).contribute_to_class(cls, name, private_only=True)
        setattr(cls, name, self)

    def __get__(self, instance, instance_type=None):
        return getattr(instance, self.db_column)

class Topic(models.Model):
    text = models.CharField(max_length=200)
    date_added = models.DateTimeField(auto_now_add=True)
    topic_id = AliasField(db_column='id')
1
blhsing 9 sep. 2018 a las 06:37

Haga que su topic_id intergerfield

En def save ():

self.topic_id = self.id
0
Learning Django 9 sep. 2018 a las 05:52