Создание формы с вводом для 2 моделей django
Я создал 2 модели,
models.py
class Integrations(models.Model):
subscription_id = models.UUIDField(
primary_key=True, default=uuid.uuid4, unique=True, editable=False
)
subscription_name = models.CharField(max_length=256)
subscription_type = models.CharField(
max_length=256, choices=SUBSCRIPTION_TYPE, default="mqtt"
)
def __str__(self):
return self.subscription_name
class Meta:
ordering = ["subscription_name"]
verbose_name = "Integration"
verbose_name_plural = "Integrations"
class Subscription(models.Model):
url = models.CharField(max_length=256)
port = models.IntegerField()
username = models.CharField(max_length=256)
password = models.CharField(max_length=256)
topics = ArrayField(models.CharField(max_length=256))
subscription_id = models.ForeignKey(Integrations, default=None, on_delete=models.CASCADE)
admin.py
class MQTTSubscriptionAdmin(admin.ModelAdmin):
fields = [ 'subscription_id', 'mqtt_url', 'port', 'username', 'password', 'subscribed_topics']
add_form = NewMQTTCreationForm
fieldsets = None
add_form_template = 'integrations/add_new_integration.html'
add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ('subscription_id', 'subscription_name', 'subscription_type'),
}),
)
forms.py
from django import forms
from django.core.exceptions import ValidationError
class NewMQTTCreationForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(NewMQTTCreationForm, self).__init__(*args, **kwargs)
self.fields['url'].required = True
self.fields['port'].required = True
self.fields['username'].required = False
self.fields['password'].required = False
self.fields['subscription_id'].required = True
self.fields['subscribed_topics'].required = False
add_new_integration.html
{% extends "admin/change_form.html" %}
{% load i18n admin_urls static admin_modify jazzmin %}
{% get_jazzmin_settings request as jazzmin_settings %}
{% block form_top %}
<!-- empty block to remove default user create text -->
{% endblock %}
{% block field_sets %}
<div class="col-12 col-lg-9">
<div class="card">
<div class="card-body">
{% get_changeform_template adminform as changeform_template %}
{% include changeform_template %}
</div>
</div>
</div>
{% endblock %}
Здесь я хочу создать форму, в которой при создании новой подписки, она должна позволить мне добавить поля, необходимые для создания новой интеграции. как я могу это сделать?
Также поля, для которых установлено значение False, все еще отображаются как обязательные.