2016-01-25 35 views
0

後,我有這樣的模式:Django管理 - 填充等領域不斷變化的外鍵

class Order(models.Model): 
    client = models.ForeignKey(
     Client, 
     on_delete=models.CASCADE, 
     related_name='orders', 
     related_query_name='order', 
    ) 

    delivery_country = CountryField('Kraj wysyłki', null=True, blank=True) 
    delivery_city = models.CharField('Miasto wysyłki', max_length=255, null=True, blank=True) 
    delivery_street = models.CharField('Ulica wysyłki', max_length=255, null=True, blank=True) 

    billing_country = CountryField('Kraj dla faktury', null=True, blank=True) 
    billing_city = models.CharField('Miasto dla faktury', max_length=255, null=True, blank=True) 
    billing_street = models.CharField('Ulica dla faktury', max_length=255, null=True, blank=True) 

    products = models.ManyToManyField(Product, through='OrderProduct') 

class Client(models.Model): 
    name = models.CharField('Imię', max_length=255) 
    surname = models.CharField('Nazwisko', max_length=255) 
    country = CountryField('Kraj', null=True, blank=True) 
    city = models.CharField('Miasto', max_length=255, null=True, blank=True) 
    street = models.CharField('Ulica', max_length=255, null=True, blank=True) 

而且我想實現這種行爲在Django管理: 的Order.client的每一個變化之後,我想預填充其他領域像這樣:

  • Order.delivery_country = client.country
  • Order.delivery_city = client.city
  • Order.delivery_street = client.street
  • Order.billing_country = client.country
  • Order.billing_city = client.city
  • Order.billing_street = client.street

是否有任何包/插件來實現這一目標? 或者,你可能有一些想法,我怎麼能做到這一點?

+0

如果訂單的細節是客戶的字面上的細節,爲什麼你會儲存數據的順序呢?直接從'client'外鍵中取出它。 – Monkpit

+0

此外,我不同意您使帳單信息與運輸信息相同,但這是一個完全獨立的問題。如果我爲我的朋友或親戚購買禮物,而且我想將訂單發送到與我的結算信息不同的位置?如果我爲我的業務購買材料,但結算地點在總部,那麼這些零件應該運送到另一個工廠? – Monkpit

+0

不幸的是我需要這兩個地址。我不能將它們從外鍵拿走,因爲客戶的地址可能會在將來發生變化,我想要保持實際的分發地址。我需要兩個地址,因爲有時公司有一個地址要發票,他們的倉庫在不同的地方。 – Blejwi

回答

0

好,我實現了這個:

JS:

(function ($) { 
    $(document).ready(function(){ 
     $("select[name='client']").on("change", function(){ 
      $.ajax({ 
       url: "/admin/clients/"+$(this).val(), 
       type: "GET", 
      }).done(function(data){ 
       client_data = $.parseJSON(data); 
       client_data = client_data[0]; 

       $("select[name='delivery_country']").val(client_data.fields.country); 
       $("input[name='delivery_city']").val(client_data.fields.city); 
       $("input[name='delivery_street']").val(client_data.fields.street); 

       $("select[name='billing_country']").val(client_data.fields.country); 
       $("input[name='billing_city']").val(client_data.fields.city); 
       $("input[name='billing_street']").val(client_data.fields.street); 
      }); 
     }); 
    }); 
})(django.jQuery); 

並查看:

def get_client_ajax(request, id): 
    return JsonResponse(serializers.serialize('json', Client.objects.filter(id=id)), safe=False)