Храните первичный ключ, но отображайте имя экземпляра в Django Forms

Я создал форму, через которую пользователь может отправлять электронное письмо клиентам. Я хотел создать пользовательский интерфейс, в котором пользователь может выбрать клиента из списка клиентов и автоматически после нажатия на клиента, поле email обновляется (т.е. email клиента). Я делал это раньше, и отношение Foreign Key работает лучше всего, но в данном случае, я думаю, нет необходимости создавать другое приложение для поддержки Email, а затем предоставлять внешние отношения и т.д. Image

forms.py:

class EmailForm(forms.Form):
customer = forms.CharField(widget=forms.Select)
email = forms.CharField(max_length=100)
subject = forms.CharField(max_length=100)
attach = forms.FileField()
message = forms.CharField(widget = forms.Textarea)

def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    self.fields['customer'].widget.choices = [(i.name, i.name) for i in Customer.objects.all()]

email.html:

  {{ customer_data|json_script:"customerdata" }}

  <script type="text/javascript">
     var customerdata = JSON.parse(document.getElementById('customerdata').textContent);
     document.getElementById('id_customer').onchange = function(event){
     var cust = customerdata.find(({customer_id}) => customer_id == event.target.value);
     document.getElementById('id_email').value = cust && cust.email ? cust.email : "";
};

Я передаю данные клиента в email.html с помощью JSON, но я не могу присвоить email соответствующему полю, потому что id_customer возвращает строку, т.е. имя клиента, а не customer_id, как я хочу. Я понимаю, что в этой строке кода я намеренно отображаю имя_клиента вместо customer_id: self.fields['customer'].widget.choices = [(i.name, i.name) for i in Customer.objects.all()] Но это потому, что я хочу, чтобы пользователь понимал, на что он нажимает, а также хочу, чтобы компьютер воспринимал ввод в терминах первичного ключа, если это имеет смысл.

Данные JSON: [{"customer_id": 1, "name": "Tolas Electronics", "ph_no": "+918137315551", "email": "tolaselectronics1@gmail.com"}, {"customer_id": 2, "name": "Ramesh Electronics", "ph_no": "+917349618919", "email": "Electronicramesh@gmail.com"}]

Вернуться на верх