Я делаю игру. Инвентарь игрока содержит оружие. Оружие является примером модели оружия. При создании нового оружия шаблон оружия выбирается случайным образом из экземпляров модели Template. Затем все поля копируются для создания экземпляра оружия. Для этого я использую эту функцию:
class ItemModel(models.Model):
def fromTemplate(self, templateInstance):
if issubclass(type(self), type(templateInstance)):
for field in templateInstance._meta.fields:
setattr(self, str(field.name), getattr(templateInstance, field.name))
self.pk = None
self.save()
for m2mField in templateInstance._meta.many_to_many:
setattr(self, m2mField.name, getattr(templateInstance, m2mField.name).all())
class Meta:
abstract = True
Вот определение модели:
class WeaponTemplate(ItemModel):
def __unicode__(self):
return str(self.id)
type = models.CharField(max_length=100, choices = TYPE_CHOICES)
category = models.CharField(max_length=100, choices = CATEGORY_CHOICES)
group = models.CharField(max_length=100, choices = GROUP_CHOICES)
name = models.CharField(max_length=25)
level = models.IntegerField(default=1)
frequency = models.IntegerField(default = 100)
rarity = models.CharField(max_length=8, choices = RARITY_CHOICES)
multiplier = models.IntegerField()
buyCost = models.IntegerField()
sellValue = models.IntegerField(blank=True, null=True)
class Weapon(WeaponTemplate):
def __unicode__(self):
return self.name
Теперь моя проблема в том, что функция fromTemplate также добавляет новый экземпляр в модель шаблона. Поэтому, когда я делаю это:
randomWeaponTemplate = random.choice(WeaponTemplate.objects.all())
newWeapon = Weapon()
newWeapon.fromTemplate(randomWeaponTemplate)
newWEapon.save()
Я вижу новую запись в таблице WeaonTemplate. Как мне изменить мой код, чтобы две модели сохранялись независимо друг от друга, чтобы при создании нового оружия из шаблона WeaponTemplate не добавлялось ничего в таблицу WeaponTemplate?