Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

540
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!