ozgurv wrote: > 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 >> >> > > > > Merhaba, Gerçekten çok teşekkür ederim Özgür bey. İnanın soruları sormadan önce defalarca sağı solu okuyorum. Ama elimizden geldiğince anladığımızı yaıyoruz analamadığımızı sizlere soruyoruz. Bu açıklayıcı cevaplarınızı toplayıp bir how-to bile oluşturabiliriz :) 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] http://liste.linux.org.tr/mailman/listinfo/linux-programlama Liste kurallari: http://liste.linux.org.tr/kurallar.php
