2011-08-10 30 views
0

我使用一個名爲「website_position」的字段來控制url的位置。這是一個整數字段。如何在Django Admin中執行此操作。用箭頭控制位置

我使用的模式是這樣的:從 進口django.db車型 進口日期時間

class Directory(models.Model): 
website_name = models.CharField(max_length=200) 
website_url = models.CharField(max_length=200) 
website_position = models.IntegerField() 
pub_date = models.DateTimeField('date published') 

現在,我將用數據填充數據庫:

website_name | website_url     | website_position | pub_date 
Google  | http://www.google.com   | 1    | 10-08-2011 
Yahoo  | http://www.yahoo.com   | 2    | 10-08-2011 
Altavista | http://www.altavista.com  | 3    | 10-08-2011 

的這個輸出將是:Google,Yahoo,Altavista

又如:(在這裏我將重新排序鏈接位置)

website_name | website_url     | website_position | pub_date 
Google  | http://www.google.com   | 3    | 10-08-2011 
Yahoo  | http://www.yahoo.com   | 2    | 10-08-2011 
Altavista | http://www.altavista.com  | 1    | 10-08-2011 

螞蟻輸出將是:AltaVista的,雅虎,谷歌

這裏的事情是,我控制在Django 管理鏈接的位置與該領域的「website_position」整數。如果Django Admin有更好的方法來處理這個問題,我想知道 。有可能 用箭頭來控制這個改變鏈接的位置,我點擊 在向上的箭頭和鏈接上去...我點擊一個向下的箭頭和 鏈接關閉...這是可能的Django Admin?

最好的問候,

回答

0

我基本上做同樣的事情在一個視圖,而不是在管理。除了我必須處理子組和不同的深度。我的方法不花哨,沒有Ajax或JavaScript或任何異步。基本上我寫函數,然後從鏈接到GET參數調用它們。 這很粗糙,但似乎非常一致。

def someview(request): 
    directory_query = Directory.objects.all().order_by('website_position') 
    #or whatever you need to query here, order_by is important 

    if 'f' in request.GET and 'id' in request.GET: 
     function = request.GET['f'] 
     target_id = request.GET['id'] 
     order_functions(request, function, target_id, directory_query) 
     return HttpResponseRedirect('/current_url/') #using a target instead of "" clears GET 
    return render_to_response('template.html', locals, context_instance=RequestContext(request),) 

def order_functions(request, function, target_id, directory_query): 
    target_obj = directory_query.get(id=target_id) 
    target_index = directory_query.index(target_obj) 
    max_position = len(directory_query) 
    min_position = 1 

    if target_index < (max_position - 1): #indexes start at 0, so have to subtract 1 from len 
     obj_above = directory_query[target_index + 1] 
    else: 
     obj_above = None 

    if target_index > 0: 
     obj_below = directory_query[target_index - 1] 
    else: 
     obj_below = None 

    if function == 'order_inc': 
     if target_obj.website_position < max_position: 
      target_obj.website_position += 1 
      obj_above.website_position += -1 
      target_obj.save() 
      obj_above.save() 

    if function == 'order_dec': 
     if target_obj.website_position > min_position: 
      target_obj.website_position += -1 
      obj_below.website_position += 1 
      target_obj.save() 
      obj_below.save() 

    return 

#your template: 
{% for item in directory_query %} 
    <li>{{ item.website_position }} 
     <input onclick="window.location.href='?f=order_dec&amp;id={{ item.id }}'" type='button' value='increase' /> 
     <input onclick="window.location.href='?f=order_inc&amp;id={{ item.id }}'" type='button' value='decrease' /> 
    </li> 
{% endfor %} 

我敢肯定有做的更清潔的方式,而且你還需要弄清楚如何將它添加到管理員。

+0

謝謝你的回覆。 –