raw_id_fields для modelforms

calloc(x,y) эквивалентно malloc(x*y)

Но calloc делает дополнительные (устанавливая значения на 0 с помощью) memset(block, 0, x*y)

Эта функция предназначена только для приятного прохождения размер элемента и количество элементов , когда в malloc необходимо умножить эти значения, чтобы получить необходимое количество байтов, эта функция также проверяет целочисленное переполнение при умножении.

Например, если вы хотите выделить память для 12 целых чисел и хотите сделать что-то с этими целыми числами, и вы, должно быть, установили ее значения на 0, используйте calloc(12, sizeof(int))

Но если вы хотите выделить некоторый блок памяти ( 256 байт), чтобы в будущем скопировать в него некоторую строку, тогда memset для вас непригодна, тогда лучше использовать malloc(sizeof(char) * 256) или, например, malloc(sizeof(wchar_t) * 256)


void *
calloc (size_t nmemb, size_t lsize)
{
  void *ptr;
  struct __meminfo *info;
  size_t size = lsize * nmemb;

  /* if size overflow occurs, then set errno to ENOMEM and return NULL */
  if (nmemb && lsize != (size / nmemb))
    {
      set_errno (ENOMEM);
      return NULL;
    }

  /* allocate memory */
  ptr = malloc (size);

  /* get pointer to info part of chunk */
  info = __mem2info (ptr);

  /* fill memory with zeros and set __MEM_CALLOC flag */
  memset (ptr, 0, info->size);
  info->flags |= __MEM_CALLOC;

  return ptr;                   /* happy end */
}
14
задан priestc 11 June 2009 в 10:34
поделиться

1 ответ

Вам необходимо изменить виджет для базового поля , а не для типа поля. Думаю, это сработает:

class OpBaseForm(ModelForm):
    base = forms.ModelChoiceField(queryset=Base.objects.all(), 
                                  widget=forms.TextInput)

    class Meta:
        model = OpBase
        ... etc... 
11
ответ дан 1 December 2019 в 07:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: