Django: Как отобразить объекты внешнего ключа модели в поле формы вручную в качестве вариантов выбора - PullRequest
0 голосов
/ 29 января 2020

Итак, у меня есть 2 модели, называемые Биллинг и Организация, как показано ниже. Выставление счетов на сайте администратора работает, как и ожидалось, то есть в поле организации отображаются все перечисленные организации и я могу выбрать одну. Если я реализую модель формы для выставления счетов, она не отображает все организации, из которых я могу выбрать. Как это реализовать? У меня есть общий доступ к файлам forms.py, views.py ниже.

models.py

class Organization(models.Model):
    name = models.CharField(max_length=255, unique=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE)

    def __str__(self):
        return str(self.name)



class Billing(models.Model):
    invoice_name = models.CharField(max_length=50)
    organization = models.ForeignKey(Organization, on_delete=models.CASCADE)
    timestamp = models.DateTimeField(auto_now_add=True)
    product = models.ManyToManyField(Product)

    def __str__(self):
        return str(self.invoice_name)

views.py

class BillingCreateView(AdminStaffRequiredMixin, SuccessMessageMixin, CreateView):
    model = Billing
    form_class = forms.BillingCreateForm
    template_name = 'dashboard/billing_new.html'
    success_message = 'Invoice has been created successfully!'

    def form_valid(self, form):
        form.instance.user = self.request.user
        return super().form_valid(form)

панель инструментов / billing_new. html

<!-- start form -->
                <div class="col-lg-12">
                        <form method="post" action="{% url 'product_create' %}" class="mailform off2" enctype="multipart/form-data">
                            <div class="row">
                                {% csrf_token %}
                                <div class="col-md-6 offset-md-3">
                                    {{ form.invoice_name }}
                                </div>
                                <div class="col-md-6 offset-md-3">
                                    {{ form.organization }}
                                </div>
                                <div class="col-md-6 offset-md-3">
                                    {{ form.product }}
                                </div>
                                {% if redirect_field_value %}
                                <input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}" />
                                {% endif %}
                                <div class="mfControls col-md-12 offset-md-3 text-left mt-2">
                                    <button type="submit" class="btn white">{% trans "CREATE" %}</button>
                                </div>
                            </div>
                        </form>
                </div>
                <!-- end form -->

forms.py

class BillingCreateForm(forms.ModelForm):


    class Meta:
        model = models.Billing
        fields = ['invoice_name', 'organization', 'product']
        widgets = {
            'invoice_name': forms.TextInput(attrs={'type': 'text', 'name': 'name', 'placeholder': 'Invoice Name:'}),
            'organization': forms.TextInput(attrs={'type': 'text', 'name': 'name', 'placeholder': 'Company:'}),
            'items': forms.TextInput(attrs={'type': 'text', 'name': 'name', 'placeholder': 'Items:'}),
        }

1 Ответ

0 голосов
/ 29 января 2020

Я исправил эту проблему с помощью виджета forms.select в forms.py следующим образом: -

class BillingCreateForm(forms.ModelForm):

class Meta:
    model = models.Billing
    fields = ['invoice_name', 'organization', 'product']
    widgets = {
        'invoice_name': forms.TextInput(attrs={'type': 'text', 'name': 'name', 'placeholder': 'Invoice Name:'}),
        'organization': forms.Select(attrs={'type': 'text', 'name': 'name', 'placeholder': 'Company:'}),
        'items': forms.TextInput(attrs={'type': 'text', 'name': 'name', 'placeholder': 'Items:'}),
    }
...