我想重構模型中的一些代碼,因爲它有點亂。我有幾個模型。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