【问题标题】:"<CustomerOrder: admin>" needs to have a value for field "id" before this many-to-many relationship can be used"<CustomerOrder: admin>" 需要有字段 "id" 的值才能使用这种多对多关系
【发布时间】:2021-03-29 13:58:35
【问题描述】:

我想为我的订单代购。但我收到一个错误,因为它是“ManytoMany”字段。

views.py:

    orderform = OrderForm()
if request.method == 'POST':
    orderform = OrderForm(request.POST)
    if orderform.is_valid() and int(orderform["customer"].value()) == customer[0].id:
        test = orderform.save(commit=False)
        orderitems = OrderItem.objects.filter(customer_id=customer[0].id)
        test.orderitem.add(orderitems )
        orderform.save()
        return redirect('home')

models.py

class CustomerOrder(models.Model):
customer = models.ForeignKey(Customer, on_delete=models.CASCADE)
orderitem = models.ManyToManyField(OrderItem, related_name="orderitem")
dealer = models.ForeignKey(Dealer, default=1, on_delete=models.CASCADE)
status = models.CharField(
    max_length=200,
    choices=WORK_STATUS,
    default="Waiting",
)
pay_method = models.CharField(
    max_length=2,
    choices=PAY_METHOD,
    default=1,
)

【问题讨论】:

    标签: django django-forms


    【解决方案1】:

    首先您必须将记录保存在数据库中,然后将项目添加到 manyTomany。您可以在 documentation 中看到发生在您身上的示例。

    以下是可以使用以下命令执行的操作示例 Python API 工具。

    创建一些出版物

    >>> p1 = Publication(title='The Python Journal')
    >>> p1.save()
    >>> p2 = Publication(title='Science News')
    >>> p2.save()
    >>> p3 = Publication(title='Science Weekly')
    >>> p3.save()
    

    创建文章

    >>> a1 = Article(headline='Django lets you build Web apps easily')
    

    在保存之前,您不能将其与出版物关联:

    >>> a1.publications.add(p1)
    Traceback (most recent call last):
    ...
    ValueError: "<Article: Django lets you build Web apps easily>"
    needs to have a value for field "id" before this many-to-many
    relationship can be used.
    

    保存!

    >>> a1.save()
    

    文章出版物相关联:

    >>> a1.publications.add(p1)
    

    您的代码应如下所示

        orderform = OrderForm()
    if request.method == 'POST':
        orderform = OrderForm(request.POST)
        if orderform.is_valid() and int(orderform["customer"].value()) == customer[0].id:
            test = orderform.save(commit=False)
            orderitems = OrderItem.objects.filter(customer_id=customer[0].id)
            orderform.save()
            test.orderitem.add(orderitems )  # <- after save
            return redirect('home')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-24
      • 2020-08-08
      • 1970-01-01
      • 1970-01-01
      • 2013-04-14
      • 1970-01-01
      相关资源
      最近更新 更多