Храните первичный ключ, но отображайте имя экземпляра в Django Forms
Я создал форму, через которую пользователь может отправлять электронное письмо клиентам.
Я хотел создать пользовательский интерфейс, в котором пользователь может выбрать клиента из списка клиентов и автоматически после нажатия на клиента, поле email обновляется (т.е. email клиента).
Я делал это раньше, и отношение Foreign Key работает лучше всего, но в данном случае, я думаю, нет необходимости создавать другое приложение для поддержки Email, а затем предоставлять внешние отношения и т.д.
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"}]