Ich habe drei Modellklassen wie diese: InstallationReportPartInstance
hat eine viele-zu-eins-Beziehung zu InstallationReportData
.Wie viele-zu-eins-Feld in Django-Formular zu integrieren
class InstallationReportData(FormData):
installationDate = models.DateField(null=True, blank=False, verbose_name="Date of Installation")
deliveryOrder = models.CharField(null=True, blank=True, max_length=255, verbose_name="Delivery Order")
unitSerialNumber = models.CharField(null=True, blank=False, max_length=255, verbose_name="Unit S/N")
unitHours = models.DecimalField(null=True, blank=False, decimal_places=2, max_digits=5, verbose_name="Unit Hours")
visualInspection = models.BooleanField(default=False, verbose_name="Visual Inspection")
...
class InstallationReportPartDefinition(models.Model):
deviceType = models.CharField(max_length=3, choices=DeviceProfile.TYPE_DEVICE, default='E', verbose_name="Device Type")
productCode = models.CharField(max_length=32, blank=False, null=False, unique=True, verbose_name="Product Code")
itemDescription = models.CharField(max_length=1023, blank=False, null=False, verbose_name="Item Description")
quantity = models.CharField(max_length=255, blank=False, null=False, verbose_name="Quantity")
class InstallationReportPartInstance(models.Model):
definition = models.ForeignKey(InstallationReportPartDefinition, on_delete=models.CASCADE, related_name="instances", verbose_name="Definitions")
installationReport = models.ForeignKey(InstallationReportData, on_delete=models.CASCADE, related_name="parts", verbose_name="Installation Report")
received = models.BooleanField(default=False, blank=True, verbose_name="Received")
installed = models.BooleanField(default=False, blank=True, verbose_name="Installed")
Ich habe ein Formular für InstallationReportData
, die wie folgt aussehen:
Other form fields...
| Product Code | Description | Quantity | Received | Installed |
| xxx1 | desc1 | 2 items | YES | NO |
| xxx2 | desc2 | 1 set | NO | NO |
| xxx3 | desc3 | 2 items | YES | NO |
So, die Aussicht ist wie folgt:
class InstallationReportView(BaseCreationView):
model = InstallationReportData
form_class = InstallationReportDataForm
template_name = 'mism_web/forms/installation_report.html'
permission_denied_message = "You do not have permission to fill installation report data."
parts = None
# Create and set needed parts as instance variable.
def get_initial(self):
super(InstallationReportView, self).get_initial()
device_type = self.workflow.device.device_type
if device_type is not None:
self.parts = InstallationReportPartDefinition.objects.filter(deviceType=self.workflow.device.device_type)
# set context for parts
def get_context_data(self, **kwargs):
context = super(InstallationReportView, self).get_context_data(**kwargs)
context['parts'] = [InstallationReportPartInstance(definition=p, installationReport=None, received=False, installed=False) for p in self.parts]
return context
Vorlagencode für Teile (innerhalb des Formulars) sieht wie aus dies:
Other form fields...
<table class="bordered">
<thead>
<tr>
<th>Product Code</th>
<th>Item Description</th>
<th>Quantity</th>
<th>Received</th>
<th>Installed</th>
</tr>
</thead>
<tbody>
{% for part in parts %}
<tr>
<td>{{ part.definition.productCode }}</td>
<td>{{ part.definition.itemDescription }}</td>
<td>{{ part.definition.quantity }}</td>
<td>
<div>
<input id="id_part_received_{{ part.definition.pk }}" type="checkbox" />
<label for="id_part_received_{{ part.definition.pk }}"></label>
</div>
</td>
<td>
<div>
<input id="id_part_installed_{{ part.definition.pk }}" type="checkbox" />
<label for="id_part_installed_{{ part.definition.pk }}"></label>
</div>
</td>
</tr>
{% endfor %}
</tbody>
</table>
Nun, ich weiß nicht, wie die teilweise Werte für die InstallationReportData
Form in form_valid
Verfahren einzustellen. Kannst du mir helfen zu verstehen, wie man das schafft? Ich bin seit einem Tag festgefahren und ich kann nicht wirklich herausfinden, wie das geht.
Ich glaube nicht, dass dies bietet, was ich brauche. – nakiya
@nakiya können Sie erarbeiten? Sie möchten eine Möglichkeit für Benutzer, das entsprechende Modell für Ihren Fremdschlüssel in einem Formular auszuwählen, oder? – ubadub
@udadub: ähm, nicht wirklich, ich antworte nicht nur auf mehrere entsprechende Modelle für den Fremdschlüssel, ich möchte auch Werte dieser mehreren Modelle gleichzeitig bearbeiten. – nakiya