PDA

View Full Version : عدم نمایش فیلد کلید خارجی(ForeignKey) در فرم و تمپلیت جنگو



masoodcmpy
چهارشنبه 08 مهر 1394, 22:11 عصر
با سلام
دوستان من یه مدل دارم و یه فرم هم از روی همین مدل دارم ، ولی وقتی یه نمونه از این فرم رو میسازم و به تمپلیت میفرستم همه فیلد ها رو نشون میده به جز فیلدی که از نوع کلید خارجی هست یعنی فیلد category
کدام رو میزارم اگر تونستید کمکم کنید.
ممنونیا علی

model.py



from category.models import Category




class News(models.Model):

title = models.CharField(max_length=30,blank=False)
kholase = models.CharField(max_length=800,blank=False)
matn = models.CharField(max_length=20000,blank=False)
date_publish = models.DateField(auto_now_add=True)
time_publish = models.TimeField(auto_now_add=True)
manba = models.CharField(max_length=20,blank=False,default ='بدون منبع')
bazdid = models.IntegerField(default=0)
category = models.ForeignKey(Category,verbose_name='دسته بندی خبر')
pic = models.FileField(verbose_name='تصویر خبر',blank=True,default='news_default_pic.jpg', upload_to='news_pic')

def __unicode__(self):
return self.title

foms.py

[PHP]
class News_Insert_Form(forms.ModelForm):
now = datetime.datetime.now()
time = str(now.hour)+':'+str(now.minute)+':'+str(now.seco nd)
date = str(now.year)+'/'+str(now.month)+'/'+str(now.day)

title = forms.CharField(
max_length=30,
required=True,
label='عنوان خبر',
error_messages={'required':''})

kholase = forms.CharField(
max_length=800,
required=True,
label='خلاصه خبر',
error_messages={'required':''},
widget=forms.Textarea(attrs={'cols':50,'rows':5}))

matn = forms.CharField(
max_length=20000,
required=True,
label='متن خبر',
error_messages={'required':''},
widget=forms.Textarea(attrs={'cols':50,'rows':10}) )

date_publish = forms.DateField(
required=True,
label='تاریخ نشر خبر',
error_messages={'required':''},
initial=date)

time_publish = forms.CharField(
required=True,
label='ساعت نشر خبر',
error_messages={'required':''},
initial=time)

manba = forms.CharField(
max_length=30,
required=True,
label='منبع خبر',
error_messages={'required':''})

bazdid = forms.IntegerField(
required=True,
label='تعداد بازدید',
error_messages={'required':''},
initial=0)

category = forms.ModelChoiceField(
queryset=Category.objects.all(),
label = 'دسته بندی خبر')

pic = forms.FileField(label='تصویر خبر')

class Meta:
model = News
fields = ['title','kholase','matn','date_publish','time_publ ish','manba','bazdid','pic','category']


def clean(self):
data = super(News,self).clean()

title = data.get('title','')
kholase = data.get('kholase','')
matn = data.get('matn','')
manba = data.get('manba','')

if not title:
self.add_error('title','عنوان خبر را وارد کنید')

if not kholase:
self.add_error('kholase','خلاصه خبر را وارد کنید')

if not matn:
self.add_error('matn','متن خبر را وارد کنید')

if not manba:
self.add_error('manba','منبع خبر را وارد کنید')

return data
[php/]

views.py
[php]
class news_insert(View):

def get(self,request):
form = News_Insert_Form()
return render_to_response('news.html',{'form':form},conte xt_instance=RequestContext(request))
[php/]

HackNetProg
جمعه 10 مهر 1394, 16:52 عصر
سلام

این کدهایی که گذاشتید ناخواناست ، نخوندم کدهاتونو ، ویرایش کنید و درستش کنید . فقط قسمت هایی که لازمه رو بذارید کل پروژه رو اپ نکنید.

اما به نظرم این مشکل شما باشه، به مثال زیر دقت کنید :



class Post(models.Model):
product_id= models.AutoField(primary_key=True)


این کلید اصلی . حالا کلید خارجی :



class UserComment(models.Model):
comment_id= models.AutoField(primary_key=True)
comment_on_product= models.ForeignKey(Post)


جانگو میاد به انتهای اسم کلید خارجی عبارت '_id' رو اضافه میکنه. یعنی من اگر بخوام با کلید خارجی کار کنم اسمش میشه :


comment_on_product_id

یعنی به گفته خودش :


By convention, Django appends "_id" to the foreign key field name. (Yes, you can override this, as well.)

n.nowroozi
جمعه 10 مهر 1394, 20:55 عصر
کدت رو داخل تگ code بزار که بشه خوند .. در کل نیازی نیست واسه مدلها در ۹۰ درصد موارد فرم بنویسی خود جنگو مدل فرم داره از اونها استفاده کن .. حتی میتونی class base view استفاده کنی واسه ساخت و ادیت منوها و نمایششون خیلی سریعتر کد میتونی بزنی به جای دستی نوشتن