存储Django模型中的对象列表

时间:2015-05-27 01:34:45

标签: python django

在Django中是否有办法在另一个对象中存储和管理多个对象(在Django admin中)?

示例,我有两个模型:Items和RMA。 RMA内部可能有多个项目。每个Item都是独一无二的,因为它是一个库存的部分,所以我不能用foreignKey多次引用同一个项目(尽管我可能误解了它的使用/实现)。

所以现在,我有一个Item模型:

class Item(models.Model):
    serial_number = models.CharField(max_length=200)
    name = models.CharField(max_length=200)
    part_number = models.CharField(max_length=200)
    location = models.CharField(max_length=200)
    def __unicode__(self):
        return self.name

一个RMA模型:

class RMA(models.Model):
    number = models.AutoField(primary_key=True)
    items = ?????

最终我希望能够继续使用Django管理功能在必要时添加/删除RMA中的项目,因此我一直没有序列化列表然后反序列化显示。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您正在为has-many关系建模。

这将使用项目到RMA的Foreign Key建模:

class Item(models.Model):
    serial_number = models.CharField(max_length=200)
    name = models.CharField(max_length=200)
    part_number = models.CharField(max_length=200)
    location = models.CharField(max_length=200)
    rma = models.ForeignKey(RMA)
    def __unicode__(self):
        return self.name

要在RMA的管理员中访问,您需要djangos InlineAdmin功能。

您可以在django tutorial part2中找到示例。

答案 1 :(得分:1)

您实际上是在描述Many-To-One relation,为此,您必须将ForeignKey引用添加到Item模型,而不是RMA模型。

您还可以添加related_name,为RMA模型提供可以调用的属性。

例如:

class Item(models.Model):
    rma = models.ForeignKey(RMA,related_name="items")
    serial_number = models.CharField(max_length=200)
    # etc...

要管理这些内容的创建,您需要InlineModelAdmin form,因此您的admin.py文件必须如下所示:

from django.contrib import admin

class ItemInline(admin.TabularInline):
    model = Item

class RMAAdmin(admin.ModelAdmin):
    inlines = [
        ItemInline,
    ]