Как сделать раскрывающийся список ForeignKey в текстовое поле? - PullRequest
0 голосов
/ 30 октября 2019

У меня есть форма, в которой есть поле ForeignKey, поскольку оно гарантирует, что вводимый номер ID - это тот, который существует в базе данных. После того, как он стал ForeignKey, он изменил мое поле, чтобы оно выглядело как раскрывающийся список в форме, показанной ниже, которая содержит набор опций с именем " Объект продавца ( 'число' )", вместо того, чтобы быть текстовым полем, как это было раньше. Предполагается, что пользователь может ввести свой номер «adp», и он должен разрешать только цифры в продавца.

Dropdown

До того, как я сделал это изменение, у меня просто было adp_number в полях в forms.py, а не какForeignKey, из-за которой я не смог провести перекрестную проверку с моделью Продавца, которая содержит все действительные adp_number .

Я попытался выполнить следующее Django: использование ForeignKeyRawIdWidget вне администратораформы , поскольку я тоже не использую admin, но как только я превратил поле в виджет, оно просто перестало отображаться на моей странице, и я не уверен, что нужно изменить.

forms.py

class WarehouseForm(AppsModelForm):
    class Meta:
        model = EmployeeWorkAreaLog
        widgets = {
            'adp_number': ForeignKeyRawIdWidget(EmployeeWorkAreaLog._meta.get_field('adp_number').remote_field, site),
        }
        fields = ('work_area', 'station_number')

models.py

class EmployeeWorkAreaLog(models.Model):
    employee_name = models.CharField(max_length=25)
    adp_number = models.ForeignKey(Salesman, on_delete=models.SET_NULL, help_text="Employee #", null=True, blank=False)
    work_area = models.ForeignKey(WorkArea, on_delete=models.SET_NULL, null=True, blank=False, help_text="Work Area", related_name="work_area")
    station_number = models.ForeignKey(StationNumber, on_delete=models.SET_NULL, null=True, help_text="Station", related_name="stations", blank=True)

enter_exit_area.html

{% extends "base.html" %}
{% block main %}
    <form id="warehouseForm" action="" method="POST" data-stations-url="{% url 'operations:ajax_load_stations' %}" novalidate >
        {% csrf_token %}
        <div>
            <div>
                {{ form.adp_number.help_text }}
                {{ form.adp_number }}
            </div>
            <div>
                {{ form.work_area.help_text }}
                {{ form.work_area }}
            </div>
            <div>
                {{ form.station_number.help_text }}
                {{ form.station_number }}
            </div>
        </div>

        <div>
            <div>
                <button type="submit" name="enter_area" value="Enter">Enter Area</button>
                <button type="submit" name="leave_area" value="Leave">Leave Area</button>
            </div>
        </div>
    </form>
{% endblock main %}
...