Форум сайта python.su
Есть вот такие модели:
class GoodsDescription(models.Model): subtype = models.ForeignKey(SubGoodsType, unique=False) basket = models.ManyToManyField(User, unique=False, null=True, blank=True) title = models.CharField(max_length=50, unique=False) articul = models.CharField(max_length=15, unique=False) image = models.ImageField(upload_to="description") description = models.TextField(max_length=4000) characteristics = models.TextField(max_length=4000, unique=False, null=True, blank=True) review = models.TextField(max_length=4000, unique=False, null=True, blank=True) number = models.IntegerField() price = models.CharField(max_length=15, unique=False, null=True, blank=True) def __unicode__(self): return self.title class GoodsComments(models.Model): product = models.ForeignKey(GoodsDescription, unique=False) title = models.CharField(max_length=50, unique=False) body = models.TextField(max_length=400, unique=False) author = models.CharField(max_length=30, unique=False) timestamp = models.DateTimeField(auto_now_add=True, editable=False, unique=False) class Meta: ordering = ('-timestamp',) class GoodsCommentsForm(ModelForm): class Meta: model = GoodsComments exclude = ('product','author',)
def AddGoodsComment (request, self): if request.method == 'POST' and request.user.is_authenticated(): try: username = request.user.username author = GoodsComments(author=username) product = GoodsComments(product=self) form = GoodsCommentsForm(request.POST, instance=(author, product)) if form.is_valid(): form.save() return HttpResponseRedirect("/catalog/") except: return HttpResponseRedirect("/catalog/") else: return HttpResponseRedirect("/catalog/")
Офлайн
instance - это инстанс (то есть объект) класса GoodsComments.
Если в базе уже есть соответствующая запись, то Вам нужно сделать get по автору и продукту.
То есть
username = request.user.username product = GoodsDescription.objects.get(pk=...) gc=GoodsComments.objects.get(product=product, author=author) form = GoodsCommentsForm(request.POST, instance=gc)
Отредактировано FishHook (Окт. 21, 2012 11:50:03)
Офлайн
author = models.CharField(max_length=30, unique=False)
author = models.ForeignKey(User)
Офлайн
FishHookНа момент составления модели я предполагал туда записывать имя автора, просто для того, что бы его потом вывести.Очень спорное решение, почему неauthor = models.CharField(max_length=30, unique=False)???author = models.ForeignKey(User)
Отредактировано SorrowFuck (Окт. 21, 2012 11:46:44)
Офлайн
FishHookНа сколько я понял initial, строка с формой должна выгладить вот так:
instance - это инстанс (то есть объект) класса GoodsComments.
Если в базе уже есть соответствующая запись, то Вам нужно сделать get по автору и продукту.
То естьЕсли же такой записи нет, то Вам нужен не инстанс, а initialusername = request.user.username product = ..... gc=GoodsComments.objects.get(product=product, author=author) form = GoodsCommentsForm(request.POST, instance=gc)
form = GoodsCommentsForm(request.POST, initial = { 'author': author, 'product': product, })
Офлайн
Все верно
Офлайн
Есть еще вопрос, не по сабжу, но по этим же моделям и функции.
def AddGoodsComment (request, self): if request.method == 'POST' and request.user.is_authenticated(): self = int(self) username = request.user.username author = GoodsComments(author=username) product = GoodsComments(product=self) form = GoodsCommentsForm(request.POST, initial = { 'author': author, 'product': product, }) if form.is_valid(): form.save() return HttpResponseRedirect("/catalog/") else: return HttpResponseRedirect("/catalog/")
Офлайн
Вы не понимаете что делаете, совсем не понимаете
author = GoodsComments(author=username) product = GoodsComments(product=self)
product = models.ForeignKey(GoodsDescription, unique=False) title = models.CharField(max_length=50, unique=False) body = models.TextField(max_length=400, unique=False) author = models.CharField(max_length=30, unique=False)
author = GoodsComments(author=username) product = GoodsComments(product=self)
Офлайн
FishHookМеня запутало то, что я полез в БД и увидел там поле product_id которое было создано в соответствие с полем модели product.
Вы не понимаете что делаете, совсем не понимаетеТут, Вы объявлете 2 инстанса одной модели. Как Вы хотите инициализировать форму этими инстансами, если Ваша форма сделана от модели, которая не содержит таких полей?author = GoodsComments(author=username) product = GoodsComments(product=self)product = models.ForeignKey(GoodsDescription, unique=False) title = models.CharField(max_length=50, unique=False) body = models.TextField(max_length=400, unique=False) author = models.CharField(max_length=30, unique=False)
product - это GoodsDescription,
author - это CahrField
как по Вашему должно это работать вообще?author = GoodsComments(author=username) product = GoodsComments(product=self)
Офлайн