BTW, django ile herhangi bir konuda sorun olursa
[email protected] adresinden bana ulaşabilirsin.

Kolay gelsin.

2010/2/18 ozgurv <[email protected]>:
> Merhaba;
>
> Örneğinden gidiyorum:
>
> 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
>
> Gözüme ilk önce çarpan mantıksal yanlış şu: Kullanıcılar yazının
> sahibini değiştirememesi gerekir. Sadece yazının içeriğini
> değiştirebilmeleri daha mantıklı. Ben yazdığım bir yazının
> temsilcisini sen yapamamalıyım. O yüzden formda temsilci bölümünün
> görünmemesi gerekir. Görünmemesi için:
>
> class YaziForm(ModelForm):
>       class Meta:
>       model = Yazilar
>       exclude = ("temsilci",)
>
> Formlar için URL ayarlaması gibi bir kavram yok. Formu kullanacağınız
> view için kendin elinizle url tanımlaması yapıyorsun. Örnek veriyorum;
> Modelform yardımıyla yeni bir yazı objesi save edeceğim veritabanına.
>
> ------
> def save_yazilar(request): # Bu controller'in url'i "/yazi/save/" olsun.
>    if request.POST:
>        form = YaziForm(request.POST)
>        if form.is_valid():
>            yeni_yazi_objesi = form.save(commit = False)
>            yeni_yazi_objesi.temsilci = request.user
>            yeni_yazi_objesi.save()
>            return HttpResponse("Veritabanina kaydedildi. Yeni yazi
> objesinin id'si : %d" % yeni_yazi_objesi.pk)
>       else:
>            render_to_response("yazi_kaydet.html", {"form": form},
> context_instance=RequestContext(request))
>   return render_to_response("yazi_kaydet.html", {"form":
> YazilarForm()}, context_instance=RequestContext(request))
> -----
>
> yazi_kaydet.html'in içeriği de şöyle olacak.
>
> <form action="/yazi/save/" method="POST">
>  <table>
>  {{form.as_table}}
>  </table>
>  <input type="submit" value="kaydet" />
> </form>
>
> Açıklama: Kodun akışını açıklıyorum:
>
> 1) kullanıcı ilk kez /yazi/save/ url'ini istediğinde boş bir tane form 
> görecek.
> 2) Forma hiç bir şey yazmadan gönderirse. request.POST querydict'inin
> içeriği şöyle olacak: {'yazi': ''}
> 2) form.is_valid() "yazi" field'i boş string olamaycağı için bize False 
> diyecek.
> 3) Else kısmına giren kod hatalı formu kullanıcıya geri basacak.
> Hatalı form nedir diye merak ediyorsan terminalde şöyle birşey
> yazabilirsin.
>
> In [1]: y = YaziForm()  # yeni form
> In [2]: print y.as_table()
> Out[2]: u'<tr><th><label for="id_yazi">Yazi:</label></th><td><input
> id="id_yazi" type="text" name="yazi" maxlength="200" /></td></tr>'
>
> In [3]: y = YaziForm({"yazi": ''}) # hatalı form
> In [4]: print y.as_table()
> In [4]: u'<tr><th><label for="id_yazi">Yazi:</label></th><td><ul
> class="errorlist"><li>This field is required.</li></ul><input
> id="id_yazi" type="text" name="yazi" maxlength="200" /></td></tr>'
>
> 4) Eğer kullanıcı bir yazi girip kaydet'e basarsa; is_valid() metodu
> True diyecek ve biz de yaptığımız 1 2 ayarlama ile veritabanına yaziyi
> kaydedeceğiz.
>
> ----
>            yeni_yazi_objesi = form.save(commit = False) #
> veritabanına kaydedilmedi.
>            yeni_yazi_objesi.temsilci = request.user
>            yeni_yazi_objesi.save() # veritabanına kaydedildi.
>
> ----
>
> Bir yazının kaydedilebilmesi için o yazinin temsilcisi kim bilmemiz
> gerekiyor. Ama kullanıcının bize yolladığı bilgide temsilci bilgisi
> yok. Temsilci de aslında bilgiyi gönderen kişi yani request.user.
> o yüzden formu veritabanına kaydetmeden önce form.save(commit = False)
> komutu ile formun bize ürettiği ama veritabanına kaydetmediği Yazılar
> objesini alıp onun temsilcisini request.user yapıyoruz. Daha sonra o
> formun ürettiği objeyi biz veritabanına kaydediyoruz.
>
>
> 2010/2/17 "H.İbrahim YILMAZ" <[email protected]>:
>> Alper KANAT yazmış:
>>> Merhaba,
>>>
>>> ModelForm için örnekleri raptiye'de (http://github.com/tunix/raptiye)
>>> bulabilirsiniz. Sorularınıza cevap vermeye çalışacağım elimden
>>> geldiğince.. Yalnız önemli bir şey söyleyeyim. Kodunuzda Türkçe
>>> değişken, sınıf isimleri vs. kullanmamanızı tavsiye ederim. Yarın
>>> destek alırken (irc, e-posta kanalları üzerinden mesela) ya da
>>> kodunuzu başkaları okuması gerektiğinde bu konuda sıkıntı çekmeyin.
>>>
>>> ModelForm dediğiniz şey varolan model'in alanlarını (field) kullanarak
>>> bir form yaratmaya yarar ve form.save() dediğinizde otomatik olarak
>>> bir nesne kaydeder. ModelForm sınıfını genişleterek yazdığınız bir
>>> sınıf neticede bir Form'dur ve normalde bir formu django'da nasıl
>>> kullanıyorsanız o şekilde kullanıyorsunuz; herhangi bir farkı yok.
>>>
>>> Form için URL ayarlaması yapmıyorsunuz. django'da URL'ler view denen
>>> metodlara bağlı. *Bu metodlar içerisinde yarattığınız formu
>>> kullanıyorsunuz.*
>>>
>>> Umarım faydalı olur yazdıklarım ama raptiye'de bu söylediklerim için
>>> epey örnek var.
>>>
>>> ---
>>> Quis custodiet ipsos custodes?
>>>
>>>
>>> 17 Şubat 2010 11:58 tarihinde "H.İbrahim YILMAZ"
>>> <[email protected] <mailto:[email protected]>>
>>> yazdı:
>>>
>>>     Merhaba,
>>>     Yazdığım uygulamaya veri girişi yapabilmek için bildiğimiz yollaardan
>>>     form oluşturmak yerine, Django'nun mutlaka vardır bir "zımbırtısı"
>>>     diyerek araştrınca karşıma ModelForm denilen olay çıktı. Fakat (yine
>>>     evet!) anlayamadığım bazı noktalar oldu. Caveplarınız için şimdiden
>>>     teşekkür ederim.
>>>
>>>     Aşağıdaki şekilde bir Modelim var.
>>>
>>>     from django.db import models
>>>     from django.contrib.auth.models import User
>>>
>>>     class Yazilar(models.Model):
>>>        yazi = models.CharField(max_length=200)
>>>        temsilci = models.ForeignKey(User)
>>>
>>>     Bu model için yine model.py içinde Form olşturduğumda aldığı hal
>>>     budur.
>>>     Sanırım buraya kadar herhangi bir sorun yok.
>>>
>>>     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
>>>
>>>     Esas orum şu şimdi bu yarattığım form için gerekli olan url
>>>     ayarlamasını nasıl vereceğim? İkincisi ModelForm'lar otomatik
>>>     olarak save() fonsiyonunu kullanıyor mu? Son olarak bunun için
>>>     herhangi bir views.py içine yazmam gereken view var mı? İnanın
>>>     kafam durdu :) Keşke bi yerlerde ufak tefek applicationlar olsa ne
>>>     bileyim adres defteri v.s gibi... Showmedo'dan izlediğim
>>>     uygulamaar biraz daha üst seviyede kalıyor...
>>>
>>>     Saygılarımla.
>>>
>>>     --
>>>     H.İbrahim YILMAZ
>>>     Sales & Technical Manager
>>>     Marmara Bilişim
>>>     Hürriyet Sokak 6/A YALOVA
>>>     Tel: +90 226 813 3131
>>>     http://www.bilisimmarmara.com.tr
>>>     Bu e-posta sadece yukarıda isimleri belirtilen kişi/ler arasında
>>>     özel haberleşme amacını taşımaktadır. Size yanlışlıkla ulaşmış ise
>>>     lütfen bizi bilgilendiriniz ve mesajı sisteminizden siliniz. Bu
>>>     e-posta içeriği veya ekindeki dosyalar kişisel ve yazarına aittir.
>>>     Bu nedenle Marmara Bilişim bu mesajın içeriği ve ekleri ile ilgili
>>>     olarak hiçbir hukuksal sorumluluk taşımaz ve kabul etmez. /// This
>>>     e-mail is intended only for the use of the individual/s to whom it
>>>     is addressed. If you are not the intended recipient of the
>>>     message, please immediately inform us and delete it from your
>>>     system. Any opinions contained in this message belong to the
>>>     author and do not constitute a commitment by Marmara Informatics.
>>>
>>>     _______________________________________________
>>>     Linux-programlama mailing list
>>>     [email protected]
>>>     <mailto:[email protected]>
>>>     http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>>>     Liste kurallari: http://liste.linux.org.tr/kurallar.php
>>>
>>>
>>> ------------------------------------------------------------------------
>>>
>>> _______________________________________________
>>> Linux-programlama mailing list
>>> [email protected]
>>> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>>> Liste kurallari: http://liste.linux.org.tr/kurallar.php
>>>
>> Merhaba,
>> Raptiyede gözüme çarpamdı acaba hangi uygulamanızda kullandınız? Esas
>> olarak anlamakta zorluk çektiğim noktalar şunlar:
>> 1-)Yarattığımız bu formu template içerisinde nasıl çağırıyoruz?
>> 2-)Bu formu diyelim ki çağırdık, bu formun "action" adresi nasıl olcak?
>> Saygılar...
>> _______________________________________________
>> Linux-programlama mailing list
>> [email protected]
>> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>> Liste kurallari: http://liste.linux.org.tr/kurallar.php
>>
>
>
>
> --
> Özgür Vatansever
>



-- 
Özgür Vatansever
_______________________________________________
Linux-programlama mailing list
[email protected]
http://liste.linux.org.tr/mailman/listinfo/linux-programlama
Liste kurallari: http://liste.linux.org.tr/kurallar.php

Cevap