无法将表单数据保存到ManyToMany字段中

时间:2019-08-27 11:47:19

标签: python django python-3.x django-models django-views

我的模特就像

class Dish(models.Model):
    names = models.ManyToManyField(DishName)
    restaurant = models.ManyToManyField(Restaurant)

我的视图文件就像

  def AddDish(request):
        if request.method == 'POST':
            dishname = request.POST.get('name')
            res = request.POST.get('restaurant')
            restaurant = Restaurant.objects.get(id=res)


            r = Dish(generic_name=GenericName,
                       names=dishname,
                       restaurant=restaurant,
                           )
            r.save()

当我尝试将我的值添加到Dish模型中时,发生此错误

禁止直接分配给多对多集的正面。改用restaurant.set()。

我尝试使用set,但是Didnt没有像我尝试restaurant.set(r)那样在何处使用它,但是到目前为止还没有运气。任何帮助将不胜感激。预先感谢

2 个答案:

答案 0 :(得分:1)

def AddDish(request):
    if request.method == 'POST':
        dishname = request.POST.get('name')
        res = request.POST.get('restaurant')
        restaurant = Restaurant.objects.get(id=res)
        dn = DishName(name=dishname)
        r = Dish.objects.create()
        r.restaurant.add(restaurant)
        r.names.add(dn)

但是,我不是确信,在这里您应该首先使用ManyToManyField。如果某道菜只属于一个{em> {em} Restaurant,那么您可能应该使用ForeignKey

您首先需要保存您的Dish 之前,您可以更改ManyToMany关系,否则,您的Dish没有分配主键。

答案 1 :(得分:1)

如果您想使用.set ==>

def AddDish(request):
    if request.method == 'POST':
        dishname = request.POST.get('name')
        res_id = request.POST.get('restaurant')
        restaurant = Restaurant.objects.get(id=res_id)
        dn = DishName.objects.get(name=dishname)
        dish = Dish.objects.create(generic_name=GenericName)
        dish.names.set([dn])
        dish.restaurant.set([restaurant])
        dish.save()