Django:如何创建同一模型对象的单独实例?

Django: How do I create separate instances of the same model object?

我有两个 class 需要相互关联。 一个项目 class 和一个订单 class.

Item 对象有几个属性:名称、成本、数量等。 我希望相同的项目能够属于几个不同的订单对象并且白色这样做,具有不同的属性 在那个 Order 对象里面。 (就像不同的订单可以有 不同数量 的相同商品)

这可能吗?

这是我目前得到的:

class Item(models.Model):
    description = models.CharField(max_length=200)
    cost = models.FloatField()
    order_quantity = models.IntegerField(null=True, blank=True)

    def __str__(self):
        return str(self.description)

    @property
    def line_total(self):
        return self.cost * self.order_quantity


class Order(models.Model):
    STATUS_CHOICES = (
        ('draft', 'Draft'),
        ('issued', 'Issued'),
        ('closed', 'Closed'),
    )
    reference = models.AutoField(primary_key=True)
    location = models.ForeignKey(
    Location, null=True, blank=True, on_delete=models.CASCADE)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    status = models.CharField(max_length=10,
                          choices=STATUS_CHOICES,
                          default='draft')
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    item = models.ManyToManyField(Item, blank=True)

    class Meta:
        ordering = ('location',)

    def __str__(self):
        return str(self.reference)

此设置允许我在不同的订单中拥有相同的商品,这很棒,但是我不知道如何根据它们所属的订单制作一些商品属性 'independent'。

好的,感谢 Chris 的评论,我找到了一个似乎可以按我想要的方式工作的解决方案。

我添加了第三个class

class Membership(models.Model):
    item = models.ForeignKey(Item, null=True, blank=True, on_delete=models.CASCADE)
    order = models.ForeignKey(
    Order, null=True, blank=True, on_delete=models.CASCADE)
    cost = models.FloatField()
    order_quantity = models.IntegerField(null=True, blank=True)

    @property 
    def line_total(self): <-----removed from Item class, pasted here
        return self.cost * self.order_quantity

我更改了我的项目 class,因此它只包含不应更改的属性

class Item(models.Model):
    description = models.CharField(max_length=200)

    def __str__(self):
        return str(self.description)

向我的视图添加了 item_in_order 变量:

def order(request, pk):
    order = Order.objects.filter(reference=pk)
    items = Item.objects.filter(order=pk)
    item_in_order = Membership.objects.filter(order=pk)

    context = {'order': order, 'items': items,
           'item_in_order': item_in_order}
    return render(request, 'orderingapp/order.html', context)

在模板上:

<tbody>
    {% for item in item_in_order %}
    <tr>
        <td>{{item.item.description |title}}</td>
        <td>£{{item.cost |floatformat:2}}</td>
        <td>{{item.order_quantity |floatformat:0}}</td>
        <td>£{{item.line_total}}</td>
    </tr>
    {% endfor %} {% else %}
    <p>Nothing here</p>
    {% endif %}
</tbody>