2013-06-04 2 views
2

В процессе регистрации пользователя пользователь сначала создает свою учетную запись, затем создает объект LIST, а затем направляется в панель мониторинга только что созданного объекта LIST. Для этого мне нужно иметь доступ к list_id недавно созданного объекта LIST, чтобы я мог передать его в следующий вид/шаблон. list_id является основным ключом для таблицы/класса LIST, и поэтому я не хочу, чтобы пользователь создавал для этого значение - он автоматически увеличивает. Вот поле от модели:Django - Pre-populating Hidden Fields

class List(models.Model): 
    list_id = models.IntegerField(primary_key=True) 

Описание list_id из MySQL:

+---------------+--------------+------+-----+---------+----------------+ 
| Field   | Type   | Null | Key | Default | Extra   | 
+---------------+--------------+------+-----+---------+----------------+ 
| list_id  | int(11)  | NO | PRI | NULL | auto_increment | 

Вот вид:

@login_required 
@permission_required('social_followup.add_list') 
def user_create(request): 
    if request.method == 'POST': 
     list_form = forms.ListForm(request.POST) 
     if list_form.is_valid(): 
      list_create = list_form.save() 
      messages.success(request, 'List {0} created'.format(list_create.list_id)) 
      up, _ = UserProfile.objects.get_or_create(user=request.user, list_id=list_create) 
      return redirect(reverse('user_dashboard', args=(2,))) # 2 is just an example 
    else: 
     list_form = forms.ListForm() 

    return TemplateResponse(request, 'dashboard/create.html', {'list_form': list_form, }) 

Однако, я обнаружил, что, когда я дон 't include list_id как часть формы, я не могу получить доступ к этому атрибуту (выполнение list_create.list_id возвращает None, когда list_id не является полем). В моем шаблоне я имею LIST_ID поля скрытого так:

<div class="control-group {% if list_form.list_id.errors %}error{% endif %}"> 
    <div class="controls"> 
     {{ list_form.list_id.as_hidden }} 
    </div> 
</div> 

С list_id требуется и скрытые, форма не будет проверками, поскольку list_id не имеет никакого значения. Однако, если я удалю list_id как поле, я не могу получить доступ к атрибуту list_id на мой взгляд. Есть ли способ автоматически заполнить это поле тем, что должно быть в следующем списке list_id, чтобы я мог захватить значение с помощью list_create.list_id и сохранить поле скрытым? Или есть другой способ добиться этого?

+0

Вы не нужно 'list_id' в вашей форме, предполагая, что я правильно следую, когда ваши списки действительно созданы. Можете ли вы добавить соответствующие части определения модели (по крайней мере, определение поля list_id и все, что на самом деле создает его, возможно, метод сохранения) на вопрос? –

+1

Я обновил вопрос с поля модели и описания поля из MySQL. –

+0

Если 'ListForm' является модельной формой для этой модели, и вы не сделали ничего странного в своем методе сохранения,' list_id' должен быть доступен в вашем представлении сразу после сохранения. Он будет автопопулен, когда объект будет записан в базу данных. –

ответ

1

Первичные ключи не существуют до того, как .save() был вызван. Если вы хотите получить доступ к ПК позже после того, как форма была сохранена, вы можете получить доступ к нему, передав в шаблон

list_form = forms.ListForm(instance=list_create)

, а затем в шаблоне

{{list_form.instance.id}}