我想重构模型中的一些代码,因为它有点乱。我有几个模型。Django多个相似的模型
class Part(models.Model):
class Category(models.Model):
class Labor(models.Model):
依此类推,总共七个。我为他们生成ID。对于它的部分是:
def save(self, *args, **kwargs):
if not Part.objects.count():
latest = 'XXX00000'
else:
latest = Part.objects.all().order_by('-par_id')[0].par_id
self.par_id = "PAR" + str(int(latest[3:]) + 1).zfill(5)
super(Part, self).save(*args, **kwargs)
它和其他类非常相似。只有班级名称正在更改,三个字母标识和参数order_by。我想知道我该怎么做干。因为它应该以某种方式缩短每个类的7行代码。
我想知道也许创建BaseModel类继承它,并以某种方式改变只提到的东西。我想获得一些指导,我该如何做得更好。
编辑:
class Part(models.Model):
par_id = models.CharField(primary_key=True, unique=True, max_length=9, blank=False)
par_name = models.CharField(max_length=50)
def save(self, *args, **kwargs):
if not Part.objects.count():
latest = 'XXX00000'
else:
latest = Part.objects.all().order_by('-par_id')[0].par_id
self.par_id = "PAR" + str(int(latest[3:]) + 1).zfill(5)
super(Part, self).save(*args, **kwargs)
class Category(models.Model):
cat_id = models.CharField(primary_key=True, unique=True, max_length=9)
cat_name = models.CharField(max_length=50)
def save(self, *args, **kwargs):
if not Category.objects.count():
latest = 'XXX00000'
else:
latest = Category.objects.all().order_by('-cat_id')[0].cat_id
self.cat_id = "CAT" + str(int(latest[3:]) + 1).zfill(5)
super(Category, self).save(*args, **kwargs)
这是两个O我的班。
我添加了我原来的帖子一些更多的信息。而你的方法适合这个,但有一点小事。对于每个班级,我可以使用我的数据更改kwargs,例如在order_by中,因为它是字符串。如何将par_id字段更改为另一个? – user84471 2014-12-03 12:53:27
您可以获得字段列表,以便在模型self.__ class __._ meta.fields中声明它们,但是'self .__ class __._ meta.fields [0]'是id,所以您需要'... [1]' – madzohan 2014-12-03 15:32:19
“PAR”或“CAT”你可以使用像这样的'self .__ class __._ meta.fields [1] .name.split('_')[0] .upper()' – madzohan 2014-12-03 15:36:22