Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

537
Vistas
Django: cómo completar las opciones en un campo de elección de modelo con un campo de otro modelo filtrado por el usuario que inició sesión

Estoy tratando de hacer un formulario de modelo con un widget de elección de modelo que hereda sus opciones de otro modelo que el modelo al que está conectado el formulario de modelo, y esta selección debe ser filtrada por el usuario conectado actual. El siguiente ejemplo ilustra mis intenciones: digamos que tengo dos modelos diferentes donde un modelo le permite al usuario registrar tipos de comidas (desayuno, cena, etc.), y el otro modelo le permite al usuario crear comidas específicas basadas en esos tipos de comidas, con el siendo la variable de conexión el título del tipo de comida.

modelos.py:

 class Mealtypes(models.Model): author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) title = models.CharField(max_length=200, default='') description = models.TextField(default='') class Specificmeals(models.Model): author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) meal_name = models.CharField(max_length=200, default='') mealtype = models.CharField(max_length=200, default='') fruit = models.BooleanField(default=False) meat = models.BooleanField(default=False) dairy = models.BooleanField(default=False)

formularios.py

 from django import forms from django.core.exceptions import ValidationError from django.forms import ModelForm from .models import Mealtypes, Specificmeals class MealAdder(ModelForm): class Meta: model = Specificmeals fields = [ 'meal_name', 'mealtype', 'fruit', 'meat', 'dairy', ] widgets = { 'text': forms.Textarea(attrs={"style": "height:10em;" "width:60em;"}), 'mealtype': forms.ModelChoiceField(queryset=Mealtypes.title.filter(author='author')), 'fruit': forms.CheckboxInput(attrs={"style": "margin-left:350px;"}), 'meat': forms.CheckboxInput(attrs={"style": "margin-left:350px;"}), 'dairy': forms.CheckboxInput(attrs={"style": "margin-left:350px;"}), }

Estoy tratando de jugar con ModelChoiceField para que consulte los tipos de comida del modelo Mealtypes filtrado por el usuario actual, pero sigo recibiendo errores de atributo (el objeto no tiene atributo...)

¿Qué estoy haciendo mal y cómo puedo solucionarlo?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Primero, agregue lo siguiente a su modelo Mealtype , para que pueda generar el título real del MealType:

 def __str__(self): return f"{self.title}"

Luego, comience pasando la solicitud de usuario en su vista:

 form = MealAdder(author=request.user)

Y luego en sus forms.py debe usar el conjunto de consultas en el __init__ del formulario como el siguiente:

 from django.forms import TextInput, CheckboxInput, Select, ModelChoiceField class MealAdder(ModelForm): def __init__(self, author, *args, **kwargs): super(MealAdder, self).__init__(*args, **kwargs) self.fields['mealtype'] = ModelChoiceField(queryset=Mealtypes.objects.filter(author=author)) class Meta: model = Specificmeals fields = ['author', 'meal_name', 'mealtype', 'fruit', 'meat', 'dairy'] widgets = { 'author': Select(), 'meal_name': TextInput(attrs={"style": "height:10em;" "width:60em;"}), 'fruit': CheckboxInput(attrs={"style": "margin-left:350px;"}), 'meat': CheckboxInput(attrs={"style": "margin-left:350px;"}), 'dairy': CheckboxInput(attrs={"style": "margin-left:350px;"}) }

No olvide que debe tener un campo de author en el formulario, ya que no puede ser nulo.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda