2012-07-03 4 views
0

사용자가 드롭 다운을 통해 제품을 지정하도록하는 대신 제품을 참조하는 URL을 통해 전달 된 인수를 기반으로 양식이 제출 한 데이터를 저장할 수 있기를 원합니다. 내가 이것을 어떻게 성취 할 수 있을지에 대한 생각?어떻게 장고의 modelform 저장 문제를 해결할 수 있습니까?

url(r'^products/(?P<product_id>\d+)/reviews/$', 'view_reviews'), 
url(r'^products/(?P<product_id>\d+)/add_review/$', 'add_review'), 

def add_review(request, product_id): 
    p = get_object_or_404(Productbackup, pk=product_id) 
    if request.method == 'POST': 
     form = ReviewbackupForm(request.POST) 
     if form.is_valid(): 
      form.save() 
      return HttpResponseRedirect(reverse('reserve.views.view_reviews', kwargs={'product_id':p.id})) 
    else: 
     form = ReviewbackupForm() 
    variables = RequestContext(request, {'form': form, 'product_id': product_id}) 
    return render_to_response('reserve/templates/create_review.html', variables) 

RATING_OPTIONS = (
    (1, '1'), 
    (2, '2'), 
    (3, '3'), 
    (4, '4'), 
    (5, '5'), 
    (6, '6'), 
    (7, '7'), 
    (8, '8'), 
    (9, '9'), 
    (10, '10'), 
) 
class Reviewbackup(models.Model): 
    review = models.CharField('Review', max_length = 2000) 
    date = models.DateField('date') 
    created_on = models.DateTimeField(auto_now_add = True) 
    updated_at = models.DateTimeField(auto_now = True) 
    user = models.CharField('Username', max_length = 200) 
    rating = models.IntegerField(max_length=2, choices=RATING_OPTIONS) 
    product = models.ForeignKey(Productbackup) 
    def __unicode__(self): 
     return self.review 

class ReviewbackupForm(ModelForm): 
    class Meta: 
     model = Reviewbackup 
     fields = ('review', 'rating', 'user', 'date') 
     widgets = { 
      'review': Textarea(attrs={'cols': 80, 'rows': 7}), 
     } 

class Productbackup(models.Model): 
    website = models.CharField('Product name', max_length = 200) 
    website_url = models.URLField('Product URL') 
    category = models.ForeignKey(Categories) 
    created_on = models.DateTimeField(auto_now_add = True) 
    updated_at = models.DateTimeField(auto_now = True) 
    def __unicode__(self): 
     return self.website 

답변

4

당신은 form.save(commit=False)의 사용을 확인하고 인스턴스 모델의 다른 속성을 설정하고 다시 저장할 수 있습니다.

if form.is_valid(): 
    review = form.save(commit=False) 
    review.product = p 
    review.save() 
: 양식을 저장보기에

,