Rich, 

Can You have a quick look at this? 

Thanks, 

On Tuesday, 12 May 2015 17:34:38 UTC+2, kecajk...@gmail.com wrote:
>
> Sure, it's pretty simple:
>
> DB:
>
> db.define_table('ipaddress',
>    Field('ip', unique=True, length=200,requires=IS_NOT_EMPTY()),
>    Field('status', length=200, default="Free", 
> requires=IS_IN_SET(['Free','Used'])),
>    format = '%(ip)s')
>
> db.define_table('server',
>    Field('servername', length=200),
>    Field('ipaddress', unique=True, length=200, 
> requires=IS_IN_DB(db(db.ipaddress.status=='Free'),db.ipaddress.ip, 
> '%(ip)s')))
>
> def __after_insert_server(f, id):
>     db(db.ipaddress.ip == f.ipaddress).update(status = T('Used') )
>
>
> def __before_delete_server(s):
> db(db.ipaddress.ip == s.select()[0].ipaddress).update(status = T('Free')) 
>    
>     
> def __before_update_server(s,f):
>     db(db.ipaddress.ip == s.select()[0].ipaddress).update(status = 
> T('Free'))    
>     db(db.ipaddress.ip == f['ipaddress']).update(status = T('Used') )
>     
> db.server._after_insert.append(__after_insert_server)
> db.server._before_delete.append(__before_delete_server)
> db.server._before_update.append(__before_update_server)
>
>
> GRID:
>
> def temp():
>   
>     query=(db.server.id>0 )
>     fields=()
>     grid = SQLFORM.grid(query=query,fields=fields,user_signature=False)
>     
>     return dict(grid=grid)
>
>
>
>
> On Monday, 11 May 2015 15:49:10 UTC+2, Richard wrote:
>>
>> Ok, so the problem is that when you edit your record the dropbox field 
>> shouldn't be blank... That is your issue, would you share the code of you 
>> form and grid and the exact validators...
>>
>> There shoud be something that don't work somewhere...
>>
>> And it you may start here : requires=IS_IN_DB(db(db.ipadd
>> ress.status=='Free'),db.ipaddress.ip, '%(ip)s')),
>>
>> It should read :
>>
>> requires=IS_IN_DB(db(db.ipaddress.status=='Free'),* 'ipaddr**ess.ip'*, 
>> '%(ip)s')),
>>
>>
>>
>> Richard
>>
>> On Mon, May 11, 2015 at 9:14 AM, 黄祥 <steve.van...@gmail.com> wrote:
>>
>>> why not use conditional requires base on url?
>>> e.g.
>>> if 'free' in request.controllers:
>>>
>>>
>>>
>>> On Monday, May 11, 2015 at 4:19:03 PM UTC+7, kecajk...@gmail.com wrote:
>>>>
>>>> Richard, 
>>>>
>>>> Let say that I have two IPs in ipaddress table:
>>>>
>>>> 10.1.1.1  FREE
>>>> 10.2.2.2 FREE
>>>>
>>>> I add a server into server table, i put name as server1 and chose IP 
>>>> from dropdown menu 10.1.1.1.
>>>> Then my ipaddress table looks like that
>>>> 10.1.1.1 USED
>>>> 10.2.2.2 FREE
>>>>
>>>> But i noticed that i did a typo in server name... in fact server name 
>>>> should be server111, so i use grid to display server table and use update 
>>>> button next to "server1" record. I change server name to server111 and i 
>>>> need to chose an IP again (as IP dropdown field is blank). So now i would 
>>>> like to chose same IP as before, but I'm not able to do it, because 
>>>> dropdown shows just 10.2.2.2 which make sense as i used 
>>>>
>>>>  requires=IS_IN_DB(db(db.ipaddress.status=='Free'),db.ipaddress.ip, 
>>>> '%(ip)s')),
>>>>
>>>> So my question is how to make IP 10.1.1.1 visiable on the list when i'm 
>>>> updating the record? 
>>>>
>>>> Regards.
>>>>
>>>> On Thursday, 7 May 2015 15:52:07 UTC+2, Richard wrote:
>>>>>
>>>>> Ok, I don't understand... Can you go back one step and explain what 
>>>>> kind of information you want to manage and why you think you have to 
>>>>> update 
>>>>> the IP address... Is there multiple records with the same server name if 
>>>>> so 
>>>>> why... It seems to me that you want to manage kind of history of IP 
>>>>> attached to a given device... If so, you DB schema is not sufficient, you 
>>>>> will need an archive table which will contains the old state of your 
>>>>> server 
>>>>> record... In your server table there will be only a single record for 
>>>>> each 
>>>>> of your server and in the history table when you update this single 
>>>>> record 
>>>>> the old state of the record will be copied there, so you can track all 
>>>>> the 
>>>>> IP a given server had in the past... An history table is easy achieve in 
>>>>> web2py with record versioning...
>>>>>
>>>>> Richard
>>>>>
>>>>> On Thu, May 7, 2015 at 6:52 AM, <kecajk...@gmail.com> wrote:
>>>>>
>>>>>> Hi, 
>>>>>>
>>>>>> What's the difference between what i wrote and what You wrote? 
>>>>>> And i believe You didn't get my point. Checking if IP is Free works 
>>>>>> correctly. Point is that i want do update the one row in Server table 
>>>>>> and 
>>>>>> change i.e. server name. I click on update button provided by grid, and 
>>>>>> i 
>>>>>> can change the name of the server (withouth changing its IP), but i need 
>>>>>> to 
>>>>>> chose an IP as well. Problem is that on the IP list, IP i used for that 
>>>>>> server before is marked as Used, so i won't see it on the list and i 
>>>>>> can't 
>>>>>> chose it again. How to make it available for selection while i'm 
>>>>>> updating 
>>>>>> the row.
>>>>>>
>>>>>> Thanks
>>>>>> On Wednesday, 6 May 2015 16:52:05 UTC+2, Richard wrote:
>>>>>>>
>>>>>>> A set which you have, but your validator has wrong syntax :
>>>>>>>
>>>>>>> IS_IN_DB(db(db.ipaddress.status=='Free'),db.ipaddress.ip, '%(ip)s')
>>>>>>>
>>>>>>> free_ip_set = db(db.ipaddress.status=='Free')
>>>>>>> IS_IN_DB(free_ip_set, 'ipaddress.ip', '%(ip)s')
>>>>>>>
>>>>>>> Try this... You define the set before you server table and after the 
>>>>>>> ipaddress table..
>>>>>>>
>>>>>>> Richard
>>>>>>>
>>>>>>> On Tue, May 5, 2015 at 9:46 AM, <kecajk...@gmail.com> wrote:
>>>>>>>
>>>>>>>> Hi All, 
>>>>>>>>
>>>>>>>> I have very basic dtabasae where in one table i have IPs which are 
>>>>>>>> used in second table:
>>>>>>>>
>>>>>>>> db.define_table('ipaddress',
>>>>>>>>    Field('ip', unique=True, length=200,requires=IS_NOT_EMPTY()),
>>>>>>>>    Field('subnet', length=200, requires=IS_NOT_EMPTY() ),
>>>>>>>>    Field('status', length=200, default="Free", 
>>>>>>>> requires=IS_IN_SET(['Free','Used'])),
>>>>>>>>    format = '%(ip)s')
>>>>>>>>
>>>>>>>> db.define_table('server',
>>>>>>>>    Field('servername', length=200),
>>>>>>>>    Field('port', length=200, requires=IS_NOT_EMPTY()),
>>>>>>>>    Field('ipaddress', unique=True, length=200, 
>>>>>>>> requires=IS_IN_DB(db(db.ipaddress.status=='Free'),db.ipaddress.ip, 
>>>>>>>> '%(ip)s')),
>>>>>>>>   
>>>>>>>>
>>>>>>>> The problem i'm having is that with grid i can delete and add new 
>>>>>>>> values to "server" table and i added function which update status of 
>>>>>>>> IP for 
>>>>>>>> USED or FREE after insert/delete. 
>>>>>>>> Problem is with Update function as when i try to update server name 
>>>>>>>> i need to chose IP again and i can't chose same IP as it is marked in 
>>>>>>>> ipaddress table as USED hence it's not displayed in dropdown menu.
>>>>>>>> How can i display all IPs that are marked as FREE in ipaddress 
>>>>>>>> table AND IPs that where currently assign to the record i'm updateing 
>>>>>>>> in 
>>>>>>>> table server? 
>>>>>>>>
>>>>>>>> Regards.
>>>>>>>>
>>>>>>>> -- 
>>>>>>>> Resources:
>>>>>>>> - http://web2py.com
>>>>>>>> - http://web2py.com/book (Documentation)
>>>>>>>> - http://github.com/web2py/web2py (Source code)
>>>>>>>> - https://code.google.com/p/web2py/issues/list (Report Issues)
>>>>>>>> --- 
>>>>>>>> You received this message because you are subscribed to the Google 
>>>>>>>> Groups "web2py-users" group.
>>>>>>>> To unsubscribe from this group and stop receiving emails from it, 
>>>>>>>> send an email to web2py+un...@googlegroups.com.
>>>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>>>
>>>>>>>
>>>>>>>  -- 
>>>>>> Resources:
>>>>>> - http://web2py.com
>>>>>> - http://web2py.com/book (Documentation)
>>>>>> - http://github.com/web2py/web2py (Source code)
>>>>>> - https://code.google.com/p/web2py/issues/list (Report Issues)
>>>>>> --- 
>>>>>> You received this message because you are subscribed to the Google 
>>>>>> Groups "web2py-users" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it, 
>>>>>> send an email to web2py+un...@googlegroups.com.
>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>
>>>>>
>>>>>  -- 
>>> Resources:
>>> - http://web2py.com
>>> - http://web2py.com/book (Documentation)
>>> - http://github.com/web2py/web2py (Source code)
>>> - https://code.google.com/p/web2py/issues/list (Report Issues)
>>> --- 
>>> You received this message because you are subscribed to the Google 
>>> Groups "web2py-users" group.
>>> To unsubscribe from this group and stop receiving emails from it, send 
>>> an email to web2py+un...@googlegroups.com.
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to