Django: установить pk модели в качестве значения по умолчанию в ее столбце - PullRequest
0 голосов
/ 25 октября 2019

Что мне нужно сделать, чтобы назначить ПК по умолчанию? Это не работает:

from django.db import models

class TeamMember(models.Model):
    id = models.AutoField(primary_key=True)
    order_listing = models.IntegerField(default=id)

Ответы [ 2 ]

1 голос
/ 25 октября 2019

Проблема в том, что идентификатор не генерируется, пока объект не будет сохранен в базе данных. Однако использование uuid может решить эту проблему.

import uuid
from django.db import models

# unique id to be used as pk for TeamMember table.
unique_id = uuid.uuid4().hex


class TeamMember(models.Model):
    id = models.CharField(primary_key=True,
        default=unique_id, editable=False
    )
    order_listing = models.IntegerField(default=unique_id)
0 голосов
/ 25 октября 2019

Вы можете использовать следующее, если хотите сбрасывать значение order_listing на id каждый раз, когда сохраняете объект.

from django.db import models

class TeamMember(models.Model):
    id = models.AutoField(primary_key=True)
    order_listing = models.IntegerField(null=True, blank=True)


    def save(self, *args, **kw):
        self.order_listing = self.id
        return super(TeamMember, self).save(*args, **kw)

ИЛИ приведенный ниже код для установки только для первоговремя.

from django.db import models
from django.dispatch import receiver
from django.db.models.signals import post_save

class TeamMember(models.Model):
    id = models.AutoField(primary_key=True)
    order_listing = models.IntegerField(null=True, blank=True)

@receiver(post_save, sender=TeamMember)
def order_listing_update(sender, instance, created, **kwargs):
    if created:
        instance.order_listing = instance.id
        instance.save()
...