在 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
Run Code Online (Sandbox Code Playgroud)
和 RMA 模型:
class RMA(models.Model):
number = models.AutoField(primary_key=True)
items = ?????
Run Code Online (Sandbox Code Playgroud)
最终,我希望能够在必要时继续使用 Django 管理功能从 RMA 添加/删除项目,因此我一直避免序列化列表然后反序列化显示。任何帮助将非常感激。
您正在建模多对多关系。
这将使用外键对 RMA进行建模:
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
Run Code Online (Sandbox Code Playgroud)
要使其在RMA您的管理员中可以访问,您需要 djangos InlineAdmin功能。
您可以在django 教程第 2 部分中找到示例。
小智 5
您正在有效地描述多对一关系,为此,您必须将外键引用添加到Item模型中,而不是模型中RMA。
您还可以添加 arelated_name来为RMA模型提供一个可以调用的属性。
例如:
class Item(models.Model):
rma = models.ForeignKey(RMA,related_name="items")
serial_number = models.CharField(max_length=200)
# etc...
Run Code Online (Sandbox Code Playgroud)
要管理这些的创建,您需要一个InlineModelAdmin 表单,因此您的admin.py文件将需要如下所示:
from django.contrib import admin
class ItemInline(admin.TabularInline):
model = Item
class RMAAdmin(admin.ModelAdmin):
inlines = [
ItemInline,
]
Run Code Online (Sandbox Code Playgroud)