2017-01-11 11 views
0

Im, создающий db для отеля, и я хочу, чтобы у вас было поле, в котором перечислены все сезоны (FK) для отеля, выбранного в предыдущем поле.Как изменить выбор в поле DjangoAdmin, если я изменяю другое поле?

class PriceTable(models.Model): 
    client = models.ForeignKey(Cliente, on_delete=models.CASCADE) 
    year = models.ForeignKey(Ano, on_delete=models.CASCADE) 
    hotel = models.ForeignKey(Hotel, on_delete=models.CASCADE) 
    season_price = models.ForeignKey(SeasonPrice, on_delete=models.CASCADE) 

class SeasonPrice(models.Model): 
    season = models.ForeignKey(Season, on_delete=models.CASCADE) 

class Season(models.Model): 
    name = models.CharField(max_length=200) 
    date_in = models.DateField() 
    date_end = models.DateField() 
    hotel = models.ForeignKey(Hotel, on_delete=models.CASCADE) 

В странице администратора Джанго, как я могу перечислить в season_price все сезоны, которые имеют внешний ключ отеля я просто выбрать? Вот изображение, чтобы лучше понять, что я хочу усвоить: Django admin explanation

+0

Возможный дубликат [filter foreignkey field in django admin] (http://stackoverflow.com/questions/10179129/filter-foreignkey-field-in-django-admin) – Sayse

+0

да, я думаю, что решает мою проблему, я буду попробуйте –

ответ

0

Обычно я всегда использую JQuery для решения таких проблем. Вот пример, который является простым примером, вам нужно изменить необходимую часть.

Описание:

Select a user in the page, and the article will change to the articles belong to the selected user. 

urls.py

from TestDjango.testdb import testdb, getArticlesByUser 
urlpatterns = [ 
    ...... 
    url(r'^testdb/$', testdb, name='testdb'), 
    url(r'^getarticles/$', getArticlesByUser, name='get_art'), 
    ...... 
] 

testdb.py

from django.shortcuts import render 
from Articles.models import Articles 
from Users.models import Users 

def testdb(request): 
    context = { 
     'users': Users.objects.all(), 
    } 
    return render(request, "Users/list.html", context) 


def getArticlesByUser(request): 
    # get parameters from page - Users/list.html 
    user_id = request.GET.get('user_id', None) 

    # get data from database by using "user_id" 
    list_articles = Articles.objects.filter(user_id=user_id) 

    str_alltitle = "" 
    for item in list_articles: 
     str_alltitle += '<option value="' + str(item.id) + '"> ' + item.title + ' </option> ' 

    # return a json response to the html 
    from django.http import JsonResponse 
    return JsonResponse({'articles': str_alltitle}) 

list.html

{% extends "base.html" %} 

{% block title %} 
    List Articles By User ID - User 
{% endblock %} 

{% block mainbody %} 
<p> 
    <span>User:</span> 
    <select id="user" name="user_id"> 
     <option value="">---Empty---</option> 
     {% for user in users %} 
      <option value="{{ user.id }}" > {{ user.email }} </option> 
     {% endfor %} 
    </select> 
</p> 
<p> 
    <span>Articles:</span> 
    <select id="article" name="article_id"></select> 
</p> 
{% endblock %} 

{% block scriptsection %} 
<script type="text/javascript"> 
$('#user').bind('change', function() { 

    $.ajax({ 
     url: '/getarticles/?user_id='+ this.value, 
     type: 'GET', 
     success: function (json) { 
      $('#article').html(json['articles']) 
     } 
    }); 
}); 

</script> 
{% endblock %} 

Это работает на моем компьютере, я использую python 3.4 и Django 1.10.4!