Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在django中不重复使用类似的模型对象_Django_Django Models_Dry - Fatal编程技术网

如何在django中不重复使用类似的模型对象

如何在django中不重复使用类似的模型对象,django,django-models,dry,Django,Django Models,Dry,我在两个不同的应用程序(app1和app2)中有两个对象object1和object2。Object1与Object2具有1对多关系。每个对象都有一个设置模型对象 这些设置完全相同,只是每个设置都与各自的对象有一对一的关系 如果两个对象都有自己的设置,或者它们应该共享一个设置对象,那么这会重复我自己吗 该结构目前看起来像: class Object1(models.Model): name = models.CharField(max_length=255) class Obj

我在两个不同的应用程序(app1和app2)中有两个对象object1和object2。Object1与Object2具有1对多关系。每个对象都有一个设置模型对象

这些设置完全相同,只是每个设置都与各自的对象有一对一的关系

如果两个对象都有自己的设置,或者它们应该共享一个设置对象,那么这会重复我自己吗

该结构目前看起来像:

class Object1(models.Model):
        name = models.CharField(max_length=255)

class Object2(models.Model):
        object1 = models.ForeignKey(Object1)



#This is in app 1
class Setting(models.Model):
    object1 = models.OneToOneField(Object1)
    setting_count = models.IntegerField(default=0)

#This is in app 2
class Setting(models.Model):
    object2 = models.OneToOneField(Object2)
    setting_count = models.IntegerField(default=0)

听起来您需要一个抽象基类

class SettingBase(models.Model):
    setting_count = models.IntegerField(default=0)

    class Meta:
        abstract = True

class Setting1(SettingBase):
    object1 = models.OneToOneField(Object1)

class Setting2(SettingBase):
    object2 = models.OneToOneField(Object2)

听起来您需要一个抽象基类

class SettingBase(models.Model):
    setting_count = models.IntegerField(default=0)

    class Meta:
        abstract = True

class Setting1(SettingBase):
    object1 = models.OneToOneField(Object1)

class Setting2(SettingBase):
    object2 = models.OneToOneField(Object2)