Шаблон Django ModelForm? - PullRequest
       9

Шаблон Django ModelForm?

3 голосов
/ 17 февраля 2010

Я хочу узнать, как я могу добавить шаблон в свой ModelForm, я новичок. Ниже вы можете увидеть мои models.py, url.py и views.py:

Мой model.py выглядит так:

from django.db import models   
from django.forms import ModelForm
from django.contrib.auth.models import User

class Yazilar(models.Model):
    yazi = models.CharField(max_length=200)    
    temsilci = models.ForeignKey(User)

class YaziForm(ModelForm):        
    class Meta: 
        model = Yazilar

Моя функция views.py ниже:

@login_required 
def yazi_ekle(request):
    yazim = YaziForm
    return render_to_response('yazi/save.html', {'YaziForm': YaziForm})

Мой url.conf выглядит так:

(r'^yazi/save/$', 'tryout.yazi.views.yazi_ekle'),

У меня вопрос о создании формы и что это за параметр "action" формы?

Ответы [ 2 ]

9 голосов
/ 09 февраля 2011

Мне кажется, что ваша проблема в видении, вы должны делать что-то вроде этого:

@login_required
def yazi_ekle(request):
        yazim = YaziForm() # Look at the (), they are needed for instantiation
        return render_to_response('yazi/save.html', {'YaziForm': yazim}) # Sending the form instance to the context, not the form class

Теперь у вас есть переменная с именем YaziForm в контексте вашего шаблона. Django формирует автоматический рендеринг в группу строк таблицы с виджетами по умолчанию, поэтому в вашем файле yazi / save.html сделайте это

<form method="post" action="">
{% csrf_token %}
<table>
{{YaziForm}}
</table>
<input type="submit" value="Submit Form"/>
</form>

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

2 голосов
/ 11 мая 2010

На самом деле вы можете использовать <form action="">, поскольку URL-адрес, на который вы хотите опубликовать, совпадает со страницей, на которой вы находитесь.

Если вам это не нравится, тогда, пока у вас есть 'django.core.context_processors.request' в вашем TEMPLATE_CONTEXT_PROCESSORS в settings.py, я думаю, вы также можете сделать:

<form action="{{ request.path }}">

Как всегда, см. Документы:)

http://docs.djangoproject.com/en/1.1/ref/request-response/#django.http.HttpRequest.path

EDIT

В случае, если за прошедший год с момента опубликования этого вопроса постер все еще не пытался прочитать документы ModelForm ... http://docs.djangoproject.com/en/1.2/topics/forms/modelforms/

Да, представление неверное, вы создали экземпляр формы. Вы также хотите некоторую логику для обработки данных поста. Если это вид редактирования, вы, вероятно, также хотите, чтобы он взял идентификатор элемента в аргументах вида и имел некоторую логику для загрузки этого экземпляра модели.

например:

@login_required
def yazi_ekle(request, id=None):
    form_args = {}
    if id is not None:
        # edit an existing Yazilar
        try:
            yazilar = Yazilar.objects.get(pk=id)
        except Yazilar.DoesNotExist:
            return Http404('Yazilar not found')
        form_args['instance'] = yazilar
    # else create new Yazilar...        

    if request.POST:
        form_args['data'] = request.POST
        yazi_form = YaziForm(**form_args)
        if yazi_form.is_valid():
            yazilar = yazi_form.save(commit=True)
    else:
        yazi_form = YaziForm(**form_args)

    return render_to_response('yazi/save.html',
        {
            'yazi_form': yazi_form
        },
        context_instance=RequestContext(request)
    )

тогда в вашем urls.py что-то вроде:

(r'^yazi/ekle/(?P<id>\d+)?$', 'tryout.yazi.views.yazi_ekle'),

и в шаблоне:

<form method="post" action="">
{% csrf_token %}<!-- required since Django 1.2 or later -->
<ul>
    {{ yazi_form.as_ul }}
</ul>
<input type="submit" value="Submit Form"/>
</form>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...