Как изменить текст по умолчанию в форме django?
Я хотел бы, чтобы вы помогли мне изменить текст по умолчанию в формах, созданных django, в полях внешнего ключа на пользовательский текст.
Описание части содержимого Models.py
class Historial(models.Model):
id_historial=models.AutoField(primary_key=True)
id_equipo=models.ForeignKey("Equipo", on_delete=models.CASCADE, verbose_name="Numero Serial de la computadora")
id_usuario=models.ForeignKey("Usuario", on_delete=models.CASCADE, verbose_name="Nombre del usuario")
fecha_entrega = models.DateField ('Fecha de entrega', auto_now=True , auto_now_add=False)
fecha_devolucion = models.DateField('Fecha de devolucion', auto_now=True , auto_now_add=False)
qr_code = models.ImageField(upload_to="CodigosQR")
recibido=models.BooleanField(default=False)
class Meta:
verbose_name="Historial"
verbose_name_plural="Historial"
def __str__(self):
return f"{self.id_equipo}"
Описание части содержимого Forms.py
class HistorialForm(forms.ModelForm):
id_equipo = forms.ModelChoiceField(queryset=Equipo.objects.filter(Prestado=False).filter(basura_electronica=False))
id_usuario = forms.ModelChoiceField(queryset=Usuario.objects.filter(allow=True).filter(activo=True))
def __init__(self, *args, **kwargs):
super(HistorialForm, self).__init__(*args,**kwargs)
self.fields['id_equipo'].widget.attrs['class'] = 'form-control'
self.fields['id_equipo'].widget.attrs['placeholder'] = 'Numero serial de la computadora'
self.fields['id_usuario'].widget.attrs['class'] = 'form-control'
self.fields['id_usuario'].widget.attrs['placeholder'] = 'Nombre del usuario'
class Meta:
model = Historial fields = [
"id_equipo", "id_usuario",
]
labels={
"id_equipo":"Numero serial de la computadora",
"id_usuario": "Nombre del usuario",
}
Описание части содержимого Views.py
class ListadoHistorial(ListView):
model=Historial
form_class=HistorialForm
template_name="prestamos/listar_prestamos.html"
context_object_name="prestamos"
queryset=None
def get_queryset(self):
return self.model.objects.all()
def get_context_data(self, **kwargs):
contexto={}
contexto["prestamos"]=self.get_queryset()
contexto["form"]=self.form_class
return contexto
def get(self, request, *args,**kwargs):
return render(request, self.template_name, self.get_context_data())
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST)
if form.is_valid():
form.save()
return redirect("equipo:listar_prestamos")
Описание части содержимого prestamo.html
{% extends "index.html" %}
{% block titulo %}
Crear nuevo prestamo
{% endblock titulo %}
{% block body %}
<form method="POST">
{% csrf_token %}
{% if error %}
<h2>{{ error }}</h2>
{% else %}
{{ form.as_p }}
<button type="submit">Guardar</button>
</form>
{% endblock body %}
{% block extrajs %}
{% endblock extrajs %}
Захват формы с текстом по умолчанию во внешних ключах
Захват
Если вам нужно знать больше кода или изображения, давайте попросим прикрепить то, что необходимо
Используйте инициалы в своей форме.
ВашаФорма(initial={}), поместите значение как словарь между фигурными скобками.
Для будущих людей прилагаю ответ, который находится в self.fields['id_equipo'].label = 'Serial number of the computer'. Но я не уверен, потому что фильтрация не работает.
Forms.py
class HistorialForm(forms.ModelForm):
id_equipo = forms.ModelChoiceField(queryset=Equipo.objects.filter(Prestado=False).filter(basura_electronica=False))
id_usuario = forms.ModelChoiceField(queryset = Usuario.objects.filter(allow = True).filter(activo=True), initial="Nombre del usuario")
def __init__(self, *args, **kwargs):
super(HistorialForm, self).__init__(*args,**kwargs)
self.fields['id_equipo'].widget.attrs['class'] = 'form-control'
self.fields['id_equipo'].widget.attrs['placeholder'] = 'Numero serial de la computadora'
self.fields['id_equipo'].widget.attrs['label'] = 'Numero serial de la computadora'
self.fields['id_equipo'].label = 'Numero serial de la computadora'
self.fields['id_usuario'].widget.attrs['class'] = 'form-control'
self.fields['id_usuario'].widget.attrs['placeholder'] = 'Nombre del usuario'
class Meta:
model = Historial
fields = [
"id_equipo", "id_usuario",
]
labels={
"id_equipo":"Numero serial de la computadora",
"id_usuario": "Nombre del usuario",
}
Если вы хотите сделать это непосредственно в Model.
class Items(models.Model):
name = models.CharField(max_length=10)
def getItem():
item = Items.objects.get(pk=1)
return item
class MyItem(models.Model):
item = models.ForeignKey(Items, on_delete=models.CASCADE, default=getItem)