【问题标题】:Getting the entries of a ManyToManyField获取 ManyToManyField 的条目
【发布时间】:2019-06-10 02:45:45
【问题描述】:

我正在使用 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 视图上显示添加的附加内容。

【问题讨论】:

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


    【解决方案1】:

    你可以尝试改变

    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 中的文档

    【讨论】:

      猜你喜欢
      • 2021-10-30
      • 1970-01-01
      • 1970-01-01
      • 2021-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-05
      • 1970-01-01
      相关资源
      最近更新 更多