首页 > 解决方案 > 在 Django 模型中反转外键关系会导致问题吗?

问题描述

问候:我创建了一个带有字符模型的 Django 应用程序,其中包含一个图像模型作为外键。这使我可以将一张图像与许多字符相关联。它作为 1:1 的关系非常有效,我创造了许多角色和图像,并祝贺自己做得很好,直到我意识到我需要将更多图像与一个角色相关联,而不是更多角色与一个图像相关联。有没有最好的方法来“逆转”这种外键关系,而不会丢失我迄今为止所做的所有工作并从头开始?

这是模型代码:

class Thumbnail(models.Model):
""" A class to represent image thumbnails."""
name = models.CharField(max_length=40)
profile = models.ImageField(upload_to='images/thumbnails', blank=True)

def __str__(self):
    return self.name


class Image(models.Model):
""" A class to represent images. """
name = models.CharField(max_length=40)
profile = models.ImageField(upload_to='images/', blank=True)
scaleFactor = models.FloatField(default=0.475)
thumbnail = models.ForeignKey(Thumbnail, null=True, on_delete=models.SET_NULL)

def __str__(self):
    return self.name

class Meta:
    ordering = ['name']


class Character(models.Model):
"""A class to define character fields."""

firstName = models.CharField(max_length=20)
lastName = models.CharField(max_length=30, blank=True)
middle = models.CharField(max_length=20, blank=True)
age = models.CharField(max_length=3)
sex = models.CharField(max_length=1, choices=[('M', 'Male'),
                                              ('F', 'Female'),
                                              ])
profession = models.CharField(max_length=100, blank=True)
hobbies = models.CharField(max_length=200, blank=True)
physicalDescription = models.TextField(blank=True)
quirks = models.TextField(blank=True)
background = models.TextField(blank=True)
relationships = models.TextField(blank=True)
quotation = models.TextField(blank=True)
image = models.ForeignKey(Image, null=True, on_delete=models.SET_NULL)
address = models.CharField(max_length=10, unique=True)

def __str__(self):
    if self.lastName:
        return f"{self.firstName} {self.lastName}: {self.address}"
    else:
        return f"{self.firstName}: {self.address}"

class Meta:
    ordering = ['address', 'firstName', 'lastName']

标签: django-models

解决方案


推荐阅读