一般来说,当我不得不多次重复几个属性时,我如何保持模型干燥?
例如:
class Event(models.Model):
title = models.CharField(max_length=255)
postal_code = models.CharField(max_length=5)
city = models.CharField(max_length=50)
street = models.CharField(max_length=50)
street_nr = models.CharField(max_length=5)
class Person(models.Model):
name = models.CharField(max_length=50)
postal_code = models.CharField(max_length=5)
city = models.CharField(max_length=50)
street = models.CharField(max_length=50)
street_nr = models.CharField(max_length=5)发布于 2020-02-26 20:48:02
规范化您的数据库结构,您可以进一步规范化地址
class Adress(models.Model):
postal_code = models.CharField(max_length=5)
city = models.CharField(max_length=50)
street = models.CharField(max_length=50)
street_nr = models.CharField(max_length=5)
class Event(models.Model):
title = models.CharField(max_length=255)
address = models.ForeignKey(Adress, on_delete=models.CASCADE)
class Person(models.Model):
name = models.CharField(max_length=50)
address = models.ForeignKey(Adress, on_delete=models.CASCADE)发布于 2020-02-26 20:47:45
只需添加引用:
class AdressData(models.Model):
postal_code = models.CharField(max_length=5)
city = models.CharField(max_length=50)
street = models.CharField(max_length=50)
street_nr = models.CharField(max_length=5)
class Event(models.Model):
title = models.CharField(max_length=255)
address_data = models.ForeignKey('AdressData')
class Person(models.Model):
name = models.CharField(max_length=50)
address_data = models.ForeignKey('AdressData')发布于 2020-02-26 21:30:26
Django模型可以使用Python的对象继承来共享公共数据;但有一个规定。这些被称为abstract models。
为了使用抽象模型重构你的代码,我会这样写它:
class BaseAddressModel(models.Model):
postal_code = models.CharField(max_length=5)
city = models.CharField(max_length=50)
street = models.CharField(max_length=50)
street_nr = models.CharField(max_length=5)
class Meta:
abstract = True
class Event(BaseAddressModel):
title = models.CharField(max_length=255)
class Person(BaseAddressModel):
name = models.CharField(max_length=50)前面的答案可能会更好地满足您的目的,但这是一个选择。
https://stackoverflow.com/questions/60414094
复制相似问题