获取ManyToManyField的条目

时间:2019-01-16 03:06:46

标签: python django django-models django-forms many-to-many

我正在使用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 :(得分:0)

您可以尝试更改

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