Why is my Django modelformset always invalid when i use a custom model manager? -


after stripping down code minimum, still not work. alway hint:

(hidden field id) select valid choice. choice not 1 of available choices. 

this forms looks like:

class changeitemform(forms.modelform):     def __init__(self, *args, **kwargs):         super(changeitemform, self).__init__(*args, **kwargs)         key in self.fields:             self.fields[key].required = false         class meta:             model = item             fields = ('name','tags','no')  changeitemformset=modelformset_factory(item,extra=0,form=changeitemform) 

and view looks this:

def manage_view(request):      if request.method=='post':           itemforms=changeitemformset(request.post,                         queryset=item.objects.filter(creator=request.user))     else:         itemforms=changeitemformset(queryset=item.objects.filter(creator=request.user))      messages.info(request,str(itemforms.is_valid())) #always prints false      context=requestcontext(request)     context.update({'formset':itemforms,                 })     return render_to_response('sonitem/test_forms.html',context) 

and in template this:

<form action="." method="post" name="upload_image"> <button type="submit" name="action" value="change">change</button> {%for form in formset.forms%}     {{form}} {%endfor%} {{formset.management_form}} {%csrf_token%} </form> messages: {%for message in messages%}     <div>{{message}}</div> {%endfor%} 

thats it. don't have clue further. maybe wrong? @ least sure somehow missed important piece of how formsets work... if please me out.

edit:
looks it's somehow related model item. made new, simplified model, item2, , code worked should. item2 had fields in form above. item: why (and more important - how) can modelfields not in formset affect formset validation?

the item2 model, 1 working:

class item2(models.model):     name=models.charfield(max_length=50)     tags=tagfield()     no=models.integerfield(blank=true,null=true)     creator = models.foreignkey(user, related_name='creator') 

edit2:
think have encircled causes trouble: have defined model manager default, looking status - models.integerfield. put class, stops working , delivers error message above. item model looks this:

class item(models.model):     private_status=1     public_status=2     released_status=3     status_choices=((private_status ,'private'),                     (public_status  ,'public' ),                     (released_status,'released'))      status = models.integerfield(choices=status_choices,default=private_status)      public = publicitemmanager()     objects = models.manager()      name=models.charfield(max_length=50)     tags=tagfield()     no=models.integerfield(blank=true,null=true)     file=models.filefield()     creator = models.foreignkey(user, related_name='creator')     status=models.integerfield(blank=true,null=true) 

so have extend question above. possible use status (which required field) in model , still use formset? formset editing, not creating items. , always prepopulated, there no chance there empty status-field.

i still don't understand how field not in form can impede validation of it. and, way, if using changeitemform, not.

edit 3:
here manager, stripped down simple version causing trouble:

class publicitemmanager(models.manager):         def get_query_set(self):             return super(publicitemmanager,                          self).get_query_set().filter(status=self.model.public_status)   

when

#public=publicitemmanager   

everything runs smooth.

edit 4:
oh, , way: why public manager affecting validation, when have queryset working objects manager?

queryset=item.**objects**.filter(creator=request.user)   

after studying django-docs quite while able find solution. looks in situations django creates "automatic" managers not _default_manager. docs here: http://docs.djangoproject.com/en/1.2/topics/db/managers/#controlling-automatic-manager-types

and here code working manager:

class publicitemmanager(models.manager):        #this important line:     use_for_related_fields = true        def get_query_set(self):        return super(publicitemmanager,self).get_query_set().filter(status=self.model.public_status) 

Comments

Popular posts from this blog

python - Scipy curvefit RuntimeError:Optimal parameters not found: Number of calls to function has reached maxfev = 1000 -

c# - How to add a new treeview at the selected node? -

java - netbeans "Please wait - classpath scanning in progress..." -