django ModelChoiceField value not id

  1. In your models.py file, define the model for which you want to create a ModelChoiceField. Ensure that the model has a primary key field, commonly named 'id', that will be used as the value for the ModelChoiceField.
from django.db import models

class YourModel(models.Model):
    # Other fields in your model
    name = models.CharField(max_length=255)

    def __str__(self):
        return self.name
  1. In your forms.py file, import the necessary modules and your model, and create a form class. Use the ModelChoiceField to represent the relationship with the desired model.
from django import forms
from .models import YourModel

class YourModelForm(forms.Form):
    your_model_field = forms.ModelChoiceField(
        queryset=YourModel.objects.all(),
        empty_label=None,
        to_field_name='id'
    )
  1. In your views.py file, import the form class, and use it in your view function or class-based view.
from django.shortcuts import render
from .forms import YourModelForm

def your_view(request):
    form = YourModelForm()
    return render(request, 'your_template.html', {'form': form})
  1. In your_template.html, render the form field in your HTML form.
<form method="post" action="{% url 'your_url_name' %}">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Submit</button>
</form>
  1. In your views.py file, handle the form submission.
from django.shortcuts import render, redirect
from .forms import YourModelForm

def your_view(request):
    if request.method == 'POST':
        form = YourModelForm(request.POST)
        if form.is_valid():
            # Process the form data
            selected_model_id = form.cleaned_data['your_model_field']
            # Add your logic here

            return redirect('success_url_name')  # Redirect to success page

    else:
        form = YourModelForm()

    return render(request, 'your_template.html', {'form': form})

Note: Replace 'YourModel', 'YourModelForm', 'your_model_field', 'your_view', 'your_template.html', 'your_url_name', and 'success_url_name' with your actual model, form, field, view, template, URL name, and success URL name. Adjust the code accordingly based on your application's requirements.