[英]Django Relations with Models
我試圖為我的模型找到一個聰明的出路。 我有兩個模型,我希望 Legend 具有 4 種不同的技能(技能模型),但我似乎無法獲得適合它的模型關系
class Skill(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4)
title = models.CharField(max_length=100)
description = models.CharField(max_length=300)
image = models.ImageField(upload_to='skills/', blank=True, null=True)
class Legend(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4)
title = models.CharField(max_length=100)
description = models.CharField(max_length=1000)
image = models.ImageField(upload_to='legends/%Y/', blank=True, null=True)
skill_1 = models.(Skill, on_delete=models.SET_NULL, null=True)
skill_2 = models.OneToOneField(Skill, on_delete=models.SET_NULL, null=True)
skill_3 = models.OneToOneField(Skill, on_delete=models.SET_NULL, null=True)
skill_4 = models.OneToOneField(Skill, on_delete=models.SET_NULL, null=True)
問題是我無法創建 OneToOneField,因為它需要為每個字段提供一個相關名稱,這在這里沒有意義,因為它們都是技能,我不想以 4 種不同的方式調用該技能的所有者(圖例)
我還嘗試在技能模型中使用圖例上的外鍵創建圖例字段,但這並沒有達到我想要的效果。
謝謝你的幫助^.^
將我的答案移到此處,以便我可以格式化代碼
所以……照我說的去做。 在技能中添加 FK 指向傳奇。 然后在你的 admin.py 創建管理類,它繼承自StackedInline
或TabularInline
。 您的文件應如下所示:
from django.contrib import admin
from apps.legends.models import Skill, Legend
class InlineAdminSkill(admin.TabularInline):
model = Skill
extra = 4
max_num = 4
class LegendAdmin(admin.ModelAdmin):
inlines = [InlineAdminSkill]
admin.site.register(Legend, LegendAdmin)
這應該可以解決管理員中的問題 - 您的技能將在您的管理員圖例視圖中可見。 試試看。
另一方面,在您的視圖中,您只需要添加一個使用例如表單集的邏輯,並使您能夠添加最多 4 個技能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.