On Tue, Nov 13, 2012 at 6:37 AM, Josue Balandrano <
xir...@gmail.com> wrote:
> Hi, I am trying to create a very basic ratings and comments app. I have this
> model:
>
> class Ratings(models.Model):
> user = models.ForeignKey(UserProfile)
> product = models.ForeignKey(Product)
> rate = models.PositiveIntegerField(default=0, null=False,
> choices=((1,'1'),(2,'2'),(3,'3'),(4,'4'),(5,'5')))
Can a choices kwarg be used with a PositiveIntegerField? Is the
problem solved by changing this to a CharField?
> comment = models.TextField(default='', blank=True)
> date_added = models.DateField(default=datetime.now)
> objects = RatingsManager()
>
> def __unicode__(self):
> return self.rating
>
> class Meta:
> unique_together = ("user", "restaurant")
>
> class RatingsManager(models.Manager):
> def get_average(self, **kwargs):
> prod = kwargs['prod']
> return self.filter(product = prod).aggregate(Avg('rate'))
>
> And I have this modelform Class:
>
> class RatingsForm(forms.ModelForm):
> comment =
> forms.CharField(widget=forms.Textarea(attrs={'name':'comentario',
> 'label':'', 'rows':'5', 'cols':'50'}))
> class Meta:
> model = Ratings
> widgets = {
> 'user' : forms.HiddenInput(),
> 'product' : forms.HiddenInput(),
> 'rate' : forms.RadioSelect(),
> }
> exclude = ('date_added', )
>
> First, this is how I initiate the form and pass it to the context variable.
> This form will only ve bisivle in a detail view of the product.
>
> rating_form = RatingsForm(initial={'product':
prod.id,
> 'user':
self.request.user.id})
> context['rating_form'] = rating_form
>
> And this is what I gets executed once the view recieves a post request.
>
> product_id = request.POST.get('product')
> user_id =
request.user.id
> try:
> instance = Ratings.objects.get(user = int(user_id), product =
> int(product_id)) #IF USER SUBMITED RATING FOR THIS PRODUCT UPDATE EXISTING
> RECORD INSTEAD OF CREATING A NEW ONE
> except Ratings.DoesNotExist:
> instance = None
> if instance is None:
> formset = RatingsForm(request.POST)
> formset.restaurant = int(restaurant_id)
> formset.user = int(user_id)
> if formset.is_valid():
> formset.save()
>
> else:
> formset = RatingsForm(request.POST, instance=instance)
> if formset.is_valid():
> formset.save()
>
> context.update({ 'rating_form':formset,})
> return self.render_to_response(context)
>
> So when ever I submit the form I get this error:
>
> Select a valid choice. That choice is not one of the available choices.
>
> But I can't figure out what does it means? Because the only choice field I
> have is the "rate" field and it could never be anything else than an int
> between 1 - 5.
>
> Any ideas how to fix this?
>
> Thank you.
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "Django users" group.
> To view this discussion on the web visit
>
https://groups.google.com/d/msg/django-users/-/u6heU1dlyDsJ.
> To post to this group, send email to
django...@googlegroups.com.
> To unsubscribe from this group, send email to
>
django-users...@googlegroups.com.
> For more options, visit this group at
>
http://groups.google.com/group/django-users?hl=en.
--
...we look at the present day through a rear-view mirror. This is
something Marshall McLuhan said back in the Sixties, when the world
was in the grip of authentic-seeming future narratives. He said, “We
look at the present through a rear-view mirror. We march backwards
into the future.”
http://www.warrenellis.com/?p=14314