簡體   English   中英

Django 與模型的關系

[英]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 創建管理類,它繼承自StackedInlineTabularInline 您的文件應如下所示:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM