Friday, May 30, 2014

Re: Problem hiding fields from admin page based on another fields value

I get same error as before; 'NoneType' object has no attribute 'readiness' when I changed to your excample. I don't understand why this is not working for me, but for everyone else....

Is it something I have forgot to import? I hope you can take a quick look at my uploaded files. Is it ok to just use get_form from the admin class directly, or do I need to create a Form class as well?



On Friday, May 30, 2014 2:35:01 PM UTC+2, Timothy W. Cook wrote:
try this get_form:

def get_form(self, request, obj=None, **kwargs):
if obj.readiness:
self.exclude = ("readinessDescription", )
return super(RequestForChangeAdmin, self).get_form(request, obj, **kwargs)


I have never used 'exclude' but it looks like yours should work.


On Fri, May 30, 2014 at 9:18 AM, Hilde Rafaelsen <hildel...@gmail.com> wrote:
Thanx,

I now changed my if test to just if obj.readines but then I get the error message 'NoneType' object has no attribute 'readiness'


I have tried with several fields from my model, but I always get this error. I guess it must be something essential I am doing wrong here, since my obj seems to be none always...

I have get_form inside my modelAdmin class.


On Friday, May 30, 2014 2:06:59 PM UTC+2, Timothy W. Cook wrote:
What do you mean by tri-state?

You are using a field that allows three states: TRUE, FALSE and NULL. 

If I understand the model, readiness would either be TRUE or FALSE.  But if you do not want to change your field type to:
readiness = models.BooleanField("Readiness", blank=True)
 
then try changing:
if obj.readiness == True:

to:

if obj.readiness and obj.readiness == True:

or just:
if obj.readiness:

Will give you the same result.

This way if it doesn't exist it will not fail on the  '== TRUE' test. 



On Fri, May 30, 2014 at 8:49 AM, Hilde Rafaelsen <hildel...@gmail.com> wrote:

Hi,

 

Thanks for the response.

 

What do you mean by tri-state?

 

I changed my get_form to this:

def get_form(self, request, obj=None, **kwargs):

                               form = super(RequestForChangeAdmin, self).get_form(request, obj, **kwargs)

                               if obj:

                                               if obj.readiness == True:

                                                               self.exclude = ("readinessDescription", )

                                                               form = super(RequestForChangeAdmin, self).get_form(request, obj, **kwargs)

                               return form

 

No my code run without errors, but nothing happpends though

 

I have tried to change the readiness filds to yes and no, but the field readiness descriptions is always displayed. Maybe it is not possibly to get a fields attribute value from admin before the admin form is posted or stored in database? Do you know?

 

Regards,

Hilde from Norway


On Friday, May 30, 2014 12:57:19 PM UTC+2, Hilde Rafaelsen wrote:
Hello,

In my django admin page I want to hide some filelds from users if a special field value is set. I have tried different solutions to solve my problem but is stucked and hope someone can help me,

If you look at my model I want to hide the field readinessDescription if readiness value is False (no), when the user log into admin page. 

In model.py:
class RequestForChange (models.Model):
rfc = models.AutoField (primary_key=True, help_text="This is the grey text")
heading = models.CharField("Heading", max_length=50)
       readiness = models.NullBooleanField("Readiness", blank=True, null=True)
       readinessDescription = models.TextField("Description of readiness", max_length=250, blank=True, null=True)


I found some hints on the web about using get_form from my RequestForChangeAdmin page, but it won't work because i get this error 'NoneType' object has no attribute 'readiness'


Here is what I have in admin.py:

class RequestForChangeAdmin(admin.ModelAdmin):
formfield_overrides = {
models.ManyToManyField: {'widget': CheckboxSelectMultiple},
}
list_display = ('rfc', 'heading', 'enviroment', 'status')
search_fields = ('changeId',)
list_filter = ('enviroment', 'acceptAT', 'status')
date_hierarchy = 'criticalDate'
inline = [RequestForChangeInline]
def get_form(self, request, obj=None, **kwargs):
form = super(RequestForChangeAdmin, self).get_form(request, obj, **kwargs)
print obj
if obj.readiness == True:
self.exclude = ("readinessDescription", )
form = super(RequestForChangeAdmin, self).get_form(request, obj, **kwargs)
return form

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
To post to this group, send email to django...@googlegroups.com.



--

============================================
Timothy Cook
LinkedIn Profile:http://www.linkedin.com/in/timothywaynecook

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users...@googlegroups.com.
To post to this group, send email to django...@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/cd42fea2-88f0-4f0f-b98e-985f7c464189%40googlegroups.com.

For more options, visit https://groups.google.com/d/optout.



--

============================================
Timothy Cook
LinkedIn Profile:http://www.linkedin.com/in/timothywaynecook

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/177c9ae8-a811-437e-8a05-fc1719dcb3a0%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

No comments:

Post a Comment