Значение по умолчанию для скрытого поля в модели Django - PullRequest
0 голосов
/ 07 мая 2010

У меня есть эта модель:

class Occurrence(models.Model):
    id = models.AutoField(primary_key=True, null=True)
    reference = models.IntegerField(null=True, editable=False)

    def save(self):
         self.reference = self.id
         super(Occurrence, self).save()

Я хочу, чтобы поле ссылки было скрыто и в то же время имело то же значение, что и идентификатор. Этот код работает, если editable=True, но если я хочу скрыть его, он не меняет значение ссылки.

Как я могу это исправить?

Ответы [ 2 ]

1 голос
/ 07 мая 2010

Почему бы тогда просто не использовать идентификатор? И вы можете выставить его под именем 'reference', сделав его свойством, но оно не будет отображаться ни в одной ModelForms, включая администратора:

@property
def reference(self):
  try:
    return self.id
  except AttributeError: #in case the object is not yet saved
    return None
0 голосов
/ 07 мая 2010

Есть пара вещей, которые я хотел бы прокомментировать в отношении вашего кода.Во-первых, в save должно быть указано reference , а не collection , а super должно иметь отступ внутри saveВы забыли передать аргументы и в super.Это должно выглядеть так:

class Occurrence(models.Model):
    id = models.AutoField(primary_key=True, null=True)
    reference = models.IntegerField(null=True, editable=False)

    def save(self):
        self.reference = self.id    
        super(Occurrence, self).save(*args, **kwargs)

Это будет работать всегда, несмотря на редактируемое значение 1015 *.Редактируется там только для админа.Кстати, я предполагаю, что вы говорите о сокрытии ссылки в админке.Поскольку идентификатор никогда не изменяется после сохранения, вы можете использовать его значение вместо ссылочного.

Надеюсь, это поможет.

...