【问题标题】:Django, append value to a foreing key listDjango,将值附加到外键列表
【发布时间】:2020-07-16 08:21:56
【问题描述】:

我设置了以下模型结构:

class Prodotto(models.Model):
    name = models.CharField('Nome del Prodotto', max_length=30)

class ProdottoFilter(models.Model):
    prodotto=models.ForeignKey(Prodotto, on_delete=models.CASCADE, null=True)

之后,我使用 ProdottoFilter 模型创建了一个表单。 这是我的views.py:

...
if request.method == 'POST':
         form = ProdottoFilterForm(request.POST)
         if form.is_valid():
             prodotto = form.save()
    else :
        form = ProdottoFilterForm()

现在我想为变量prodotto 附加一个值,例如值“Tutti i prodotti”。

我试过了:

a="Tutti i prodotti"
prodotto.insert(0,a) 

但是python给我以下错误:

'ProdottoFilter' object has no attribute 'insert'

【问题讨论】:

  • 你能显示prodotto分配的代码吗?不清楚这是查询集还是列表。

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


【解决方案1】:

prodottoProdottoFilter 模型的一个实例,因此如果您想分配一个新的Prodotto,那么您可以执行以下代码:

...
prodotto_filter = form.save()
prodotto_filter.prodotto = Prodotto.objects.create(name='Tutti i prodotti')
prodotto_filter.save()
...

请注意,我已将变量重命名为与对象类型更加一致。

【讨论】:

    【解决方案2】:

    我想补充其他答案。你也可以这样使用add方法:

    # In views.py - at if form.is_valid(): block.
    prodotto_filter = form.save()
    prodotto = Prodotto.objects.create(name='Tutti i prodotti')
    prodotto.prodottofilter_set.add(prodotto)
    

    也许这种方法更好地代表了“将值附加到外键列表”的想法。您可以在此处阅读有关该方法的更多信息https://docs.djangoproject.com/en/3.0/ref/models/relations/#django.db.models.fields.related.RelatedManager.add 您也可以通过在 ForeignKey 定义中设置 related_name 参数来更改默认的 prodottofilter_set 名称:

    # in models.py
    class ProdottoFilter(models.Model):
        prodotto=models.ForeignKey(Prodotto, on_delete=models.CASCADE, null=True, related_name='filters')
    
    # In views.py - at if form.is_valid(): block.
    prodotto_filter = form.save()
    prodotto = Prodotto.objects.create(name='Tutti i prodotti')
    prodotto.filters.add(prodotto)
    

    【讨论】:

      【解决方案3】:
      1. 保存ProdottoFilter 模型实例。
      2. 创建一个Prodotto 模型实例。
      3. 将字符串分配给name 属性并保存Prodotto 实例。
      4. 附加外键。
      5. 保存ProdottoFilter实例
      prodottofilter = form.save()
      prodotto = Prodotto(name="Tutti i prodotti")
      prodotto.save()
      prodottofilter.prodotto = prodotto
      prodottofilter.save()
      

      【讨论】:

        【解决方案4】:

        model.py

        class like(models.Model):
            post = models.ForeignKey(post,on_delete = "CASCADE")
        

        views.py

        def like(request):
            if request.method == 'GET':
                post_id = request.GET['post_id']
                likedpost = post.objects.get(id = post_id )
                m = like( post=likedpost )
                m.save()
                return HttpResponse('success')
            else:
                return HttpResponse("unsuccesful")
        

        【讨论】:

          猜你喜欢
          • 2022-01-06
          • 2020-02-25
          • 2021-09-27
          • 1970-01-01
          • 2015-07-03
          • 2022-12-17
          • 2014-02-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多