我使用名为“website_position”的字段来控制网址的位置。这是一个整数字段。
我使用的模型是这样的: 来自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
Ant的输出将是:Altavista,Yahoo,Google
这里的事情是我控制Django中链接的位置 管理员在字段“website_position”中使用整数。我想知道 如果Django Admin有更好的方法来解决这个问题。有可能 用箭头控制这个以改变链接的位置,我点击 在向上箭头和链接上升...我点击向下箭头和 链接断开......这可以在Django Admin中使用吗?
最诚挚的问候,
答案 0 :(得分:1)
答案 1 :(得分: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&id={{ item.id }}'" type='button' value='increase' />
<input onclick="window.location.href='?f=order_inc&id={{ item.id }}'" type='button' value='decrease' />
</li>
{% endfor %}
我确信有更简洁的方法,你仍然需要弄清楚如何将其添加到管理员。