Форум сайта python.su
Спасибо большое!
С помощью Ваших советов я не теряю веры, что стану джанго-гуру :)
Но я упорно не понимаю такую вещь.
Вот например модель:
class Image(models.Model):
image_author = models.ForeignKey(User)
image_title = models.CharField(max_length=30)
image_description = models.TextField(blank=True)
image_pubdate = models.DateTimeField(auto_now_add=True)
image_source = models.ImageField(upload_to='images/')
image_tags = models.ManyToManyField(Tag,blank=True)
def __unicode__(self):
return '%s (%s)' % (self.image_title, self.image_author)
def save(self):
#Вот здесь!
#--------------------------
try:
author = User.objects.get(username=self.cleaned_data["author"])
except User.DoesNotExist:
return
#----------------------------
title = self.cleaned_data["title"]
describe = self.cleaned_data["describe"]
firstfile = self.cleaned_data["firstfile"]
from RandomQuote.quotes.models import Image
image = Image(image_author=author,
image_title=title,
image_description=describe,
image_source = firstfile
)
image.save()
image.image_tags = self.cleaned_data["tags"]
image.save()
>>> author = User.objects.get(username='root')
class Comment(models.Model):
comment_author = models.ForeignKey(User)
comment_image = models.ForeignKey(Image)
comment_title = models.CharField(max_length=50)
comment_pubdate = models.DateTimeField(auto_now_add=True)
comment_text = models.TextField()
def __unicode__(self):
return '%s (%s)' % (self.comment_title, self.comment_author)
<form action="comments/" method="POST">
{% csrf_token %}
<input type="hidden" name="authorr" value="{{ user.username }}">
<TABLE cellpadding="0" cellspacing="0" border="0" style="border-width:1px; border-spacing: 2px;
border-style: none; border-color: green; border-collapse: collapse;background-color: white;">
<TR><TD><label for="id_messagename">Название:</label></TD><TD><input type="text" size=20 name="messagename" id="id_messagename" /></TD></TR>
<TR><TD><label for="id_message">Сообщение:</label></TD><TD><textarea rows="10" cols="20" name="message" id="id_message"></textarea> </TD></TR>
<TR><TD colspan="2" align="right"><input type="submit" value="Отправить!"/></TD></TR>
</TABLE>
<input type="hidden" name="picturenumber" value="{{ images.id }}">
</form>
from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response
from RandomQuote.comments.forms import CommentsForm
def addComments(request):
if request.method == 'POST':
form = CommentsForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/')
else:
return HttpResponseRedirect('/')
else:
return HttpResponseRedirect('/')
from django import forms
from RandomQuote.quotes.models import Image
from django.contrib.auth.models import User
class CommentsForm(forms.Form):
author = forms.CharField()
image = forms.CharField()
title = forms.CharField()
text = forms.CharField()
def save(self):
try:
author = User.objects.get(username=self.cleaned_data["authorr"])
except User.DoesNotExist:
return
try:
image = Image.objects.get(pk=self.cleaned_data["picturenumber"])
except Image.DoesNotExist:
return
#image = self.cleaned_data["picturenumber"]
title = self.cleaned_data["messagename"]
text = self.cleaned_data["message"]
from RandomQuote.quotes.models import Comment
Comment(comment_author=author,
comment_image=image,
comment_title=title,
comment_text = text
).save()
try:
image = Image.objects.get(pk=self.cleaned_data["picturenumber"])
except Image.DoesNotExist:
return
<input type="hidden" name="picturenumber" value="{{ images.id }}">
Офлайн
Спасибо большое!
С помощью Ваших советов я не теряю веры, что стану джанго-гуру :)
Но я упорно не понимаю такую вещь.
Вот например модель:
class Image(models.Model):
image_author = models.ForeignKey(User)
image_title = models.CharField(max_length=30)
image_description = models.TextField(blank=True)
image_pubdate = models.DateTimeField(auto_now_add=True)
image_source = models.ImageField(upload_to='images/')
image_tags = models.ManyToManyField(Tag,blank=True)
def __unicode__(self):
return '%s (%s)' % (self.image_title, self.image_author)
def save(self):
#Вот здесь!
#--------------------------
try:
author = User.objects.get(username=self.cleaned_data["author"])
except User.DoesNotExist:
return
#----------------------------
title = self.cleaned_data["title"]
describe = self.cleaned_data["describe"]
firstfile = self.cleaned_data["firstfile"]
from RandomQuote.quotes.models import Image
image = Image(image_author=author,
image_title=title,
image_description=describe,
image_source = firstfile
)
image.save()
image.image_tags = self.cleaned_data["tags"]
image.save()
>>> author = User.objects.get(username='root')
class Comment(models.Model):
comment_author = models.ForeignKey(User)
comment_image = models.ForeignKey(Image)
comment_title = models.CharField(max_length=50)
comment_pubdate = models.DateTimeField(auto_now_add=True)
comment_text = models.TextField()
def __unicode__(self):
return '%s (%s)' % (self.comment_title, self.comment_author)
<form action="comments/" method="POST">
{% csrf_token %}
<input type="hidden" name="authorr" value="{{ user.username }}">
<TABLE cellpadding="0" cellspacing="0" border="0" style="border-width:1px; border-spacing: 2px;
border-style: none; border-color: green; border-collapse: collapse;background-color: white;">
<TR><TD><label for="id_messagename">Название:</label></TD><TD><input type="text" size=20 name="messagename" id="id_messagename" /></TD></TR>
<TR><TD><label for="id_message">Сообщение:</label></TD><TD><textarea rows="10" cols="20" name="message" id="id_message"></textarea> </TD></TR>
<TR><TD colspan="2" align="right"><input type="submit" value="Отправить!"/></TD></TR>
</TABLE>
<input type="hidden" name="picturenumber" value="{{ images.id }}">
</form>
from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response
from RandomQuote.comments.forms import CommentsForm
def addComments(request):
if request.method == 'POST':
form = CommentsForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/')
else:
return HttpResponseRedirect('/')
else:
return HttpResponseRedirect('/')
from django import forms
from RandomQuote.quotes.models import Image
from django.contrib.auth.models import User
class CommentsForm(forms.Form):
author = forms.CharField()
image = forms.CharField()
title = forms.CharField()
text = forms.CharField()
def save(self):
try:
author = User.objects.get(username=self.cleaned_data["authorr"])
except User.DoesNotExist:
return
try:
image = Image.objects.get(pk=self.cleaned_data["picturenumber"])
except Image.DoesNotExist:
return
#image = self.cleaned_data["picturenumber"]
title = self.cleaned_data["messagename"]
text = self.cleaned_data["message"]
from RandomQuote.quotes.models import Comment
Comment(comment_author=author,
comment_image=image,
comment_title=title,
comment_text = text
).save()
try:
image = Image.objects.get(pk=self.cleaned_data["picturenumber"])
except Image.DoesNotExist:
return
<input type="hidden" name="picturenumber" value="{{ images.id }}">
Офлайн
Kotakotaauthor это обьект. Мы просто ищем его в БД по username.
вернет: root
получается: image_author = root
Но ведь первичный ключ в таблице auth_user Django это id, а получается мы связываем таблицы по полю username таблицы auth_user?
Офлайн
pillПроблема такая:Kotakotaauthor это обьект. Мы просто ищем его в БД по username.
вернет: root
получается: image_author = root
Но ведь первичный ключ в таблице auth_user Django это id, а получается мы связываем таблицы по полю username таблицы auth_user?
'root' - возвращает author.__unicode__(), вызываемый когда нужно отобразить объект где-нибудь.
под капотом джанга создаст связь по pk.
Что-бы связать по другому полю нужно явно указать to_field.
До конца не понял с чем собственно у вас проблема.
ЗЫ: уберите дублирующий пост.
from django.db import models
from django.contrib.auth.models import User
class Tag(models.Model):
tag_name = models.CharField(max_length=30)
def __unicode__(self):
return self.tag_name
class Image(models.Model):
image_author = models.ForeignKey(User)
image_title = models.CharField(max_length=30)
image_description = models.TextField(blank=True)
image_pubdate = models.DateTimeField(auto_now_add=True)
image_source = models.ImageField(upload_to='images/')
image_tags = models.ManyToManyField(Tag,blank=True)
def __unicode__(self):
return '%s (%s)' % (self.image_title, self.image_author)
class Comment(models.Model):
comment_author = models.ForeignKey(User)
comment_image = models.ForeignKey(Image)
comment_title = models.CharField(max_length=50)
comment_pubdate = models.DateTimeField(auto_now_add=True)
comment_text = models.TextField()
def __unicode__(self):
return '%s (%s)' % (self.comment_title, self.comment_author)
Офлайн
Comment(comment_author=author, comment_image=image, comment_title='title', comment_text='text').save()
from django import forms
from RandomQuote.quotes.models import Image
from django.contrib.auth.models import User
class CommentsForm(forms.Form):
authorr = forms.CharField()
picturenumber = forms.IntegerField()
messagename = forms.CharField()
message = forms.CharField()
def save(self):
try:
authorr = User.objects.get(username=self.cleaned_data["authorr"])
except User.DoesNotExist:
return
try:
picturenumber = Image.objects.get(pk=self.cleaned_data["picturenumber"])
except Image.DoesNotExist:
return
#image = self.cleaned_data["picturenumber"]
messagename = self.cleaned_data["messagename"]
message = self.cleaned_data["message"]
from RandomQuote.quotes.models import Comment
Comment(comment_author=authorr,
comment_image=picturenumber,
comment_title=messagename,
comment_text = message
).save()
<input type="hidden" name="authorr" value="{{ user.username }}">
<input type="text" size=20 name="messagename" id="id_messagename" />
<textarea rows="10" cols="20" name="message" id="id_message"></textarea>
<input type="hidden" name="picturenumber" value={{ images.id }}>
author = forms.CharField()
image = forms.CharField()
title = forms.CharField()
text = forms.CharField()
Отредактировано (Июнь 23, 2011 10:06:03)
Офлайн
KotakotaИз shell'a все должно сохраняться.
Наверное когда вызываешь в конце метод save(), Django пытается записать информацию в БД, а видимо из shell'a этого не сделать,
поэтому ругается на отсутствие аттрибута.
Офлайн
Еще для полного понимания хотел прояснить следующий код:
from django import forms
from RandomQuote.quotes.models import Tag
from django.contrib.auth.models import User
class UploadFileForm(forms.Form):
author = forms.CharField()
title = forms.CharField()
describe = forms.CharField()
tags = forms.ModelMultipleChoiceField(Tag.objects.all())
firstfile = forms.ImageField()
def save(self):
try:
author = User.objects.get(username=self.cleaned_data["author"])
except User.DoesNotExist:
return
#author = self.cleaned_data["author"]
title = self.cleaned_data["title"]
describe = self.cleaned_data["describe"]
firstfile = self.cleaned_data["firstfile"]
from RandomQuote.quotes.models import Image
image = Image(image_author=author,
image_title=title,
image_description=describe,
image_source = firstfile
)
image.save()
image.image_tags = self.cleaned_data["tags"]
image.save()
tags = forms.ModelMultipleChoiceField(Tag.objects.all())
Отредактировано (Июнь 23, 2011 11:56:21)
Офлайн
KotakotaДа, где-то так.
Здесь мы сначала сохраняем все, кроме поля image_tags…
KotakotaДа, form.is_valid() вернет False
И еще небольшой вопрос:
Офлайн
pillСпасибо!KotakotaДа, где-то так.
Здесь мы сначала сохраняем все, кроме поля image_tags…KotakotaДа, form.is_valid() вернет False
И еще небольшой вопрос:
Отредактировано (Июнь 23, 2011 13:17:01)
Офлайн