gpt4 book ai didi

python - Django:从父表到子表的外键

转载 作者:行者123 更新时间:2023-11-29 14:20:59 24 4
gpt4 key购买 nike

我想要一个从父表到子表的外键链接;对于主要由后端提供支持的站点。目前只有网站的管理部分处于事件状态,因为这是让我们的信息团队工作所需的唯一部分。

应用结构:

景点:

|
|--- 型号
| |
| | --- _ _init__.py
| | --- 图像元数据.py
|
| --- 模型.py
| --- 管理员.py

(imagemetadata在目录model下)

文件 imagemetadata.py

from attraction.models import Attraction

class ImageMetadata(models.Model):
image = models.ImageField(upload_to='', blank=True, null=True)
upload_time = models.DateTimeField(null=True)

attraction = models.ForeignKey(Attraction)

文件模型.py

from django.db import models

class Attraction(models.Model):
name = models.CharField(max_length=100, null=False)
description = models.CharField(max_length=500, null=True)
url = models.URLField(max_length=200, null=True)

文件admin.py

class ImageMetadataInline(admin.TabularInline):
model = ImageMetadata
extra = 2

class AttractionAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['name', 'description', 'url']}),
]

inlines = [ImageMetadataInline, PriceInline]

admin.site.register(Attraction, AttractionAdmin)

我面临的问题是我无法获得从 Attraction 到 Imagemetadata 的外键。如果我尝试进行双向外键导入,则会发生错误。 (Python 中不允许循环导入)。由于 admin 的结构,从 Attraction 到 ImageMetadata 不能有外键,因为 Django 不允许这样做。

有没有办法在不改变 admin 结构的情况下,将外键点从 Attraction 指向 ImageMetadata?

最佳答案

您可以按如下方式定义 Meta 类:

class ImageMetadata(models.Model):
# ... your fields

class Meta:
app_label = 'attraction'

在您的应用程序目录中创建一个子目录 models。将模型拆分为不同的文件。然后编辑 __init__.py:

from model_file1 import *
from model_fiel2 import *
# and so on

现在你可以:

from attraction.models import whatever

我以这种方式拆分我的测试。它也应该适用于模型。

但是我建议您首先重新考虑您的设计。在 Python 中,在一个文件中包含多个类是完全可以的。 Python 既不是 PHP 也不是 Java。每个文件 200 LOC 算不了什么。我会说,如果您的 models.py 高达 2k LOC,那绝对没问题。只是我个人的意见。也许这里的一些 Python 专家可以纠正我。

在拆分 models.py 之前,请考虑是否可以将项目拆分为更小的应用程序。也许 ImageMetadata 应该属于另一个应用程序。您无法通过将 models.py 拆分为多个文件来实现粒度。仅仅因为你有许多小文件而不是一个大文件并不意味着项目逻辑被拆分了。您应该将您的逻辑分解为几个独立的应用程序。

关于python - Django:从父表到子表的外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27011526/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com