Получение записей ManyToManyField - PullRequest
0 голосов
/ 16 января 2019

Я работаю с ManyToManyField и использую ModelMultipleChoice в форме, я хочу получить записи, но все, что я получаю, это appname.Extra.none

models.py

class Extra(models.Model):
    extra_n = models.CharField(max_length=200)
    extra_price = models.IntegerField(default=0)

    def __str__(self):
        return self.extra_n

class Meal(models.Model):
    restaurant = models.ForeignKey(Restaurant, on_delete=models.PROTECT)
    category = models.ForeignKey(MealCategory, on_delete=models.PROTECT)
    name = models.CharField(max_length=500)
    short_description = models.CharField(max_length=500)
    image = models.ImageField(upload_to='meal_images/', blank=False)
    price = models.IntegerField(default=0)
    extras = models.ManyToManyField(Extra, related_name='extras')


    def __str__(self):
        return self.name

forms.py

class MealForm(forms.ModelForm):

    extras = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple(), queryset=Meal.extras)

    class Meta:
        model = Meal
        exclude = ("restaurant",)

views.py

 def restaurant_meal(request):
    meals = Meal.objects.filter(restaurant = request.user.restaurant).order_by("-id")
    return render(request, 'restaurant/meal.html', {"meals": meals})  

Требуемый результат - добавление дополнительных возможностей, отображаемых в представлении restaurant_meal.

1 Ответ

0 голосов
/ 16 января 2019

вы можете попробовать изменить

meals = Meal.objects.filter(restaurant = request.user.restaurant).order_by("-id")

до

meals = Meal.objects.filter(restaurant = request.user.restaurant).prefetch_related('extras').order_by("-id")

и попробуйте снова.

Документ об этом в prefetch_related

...