В следующей модели (Item
) моя цель - явно указать настроенный идентификатор объекта при сохранении.Я использую Django 1.2.5 и sqlite.
class Category(models.Model):
name = models.CharField(max_length=32)
class Item(models.Model):
id = models.CharField(primary_key=True, blank=True, max_length=8)
group = models.ForeignKey(Category)
def save(self, *args, **kwargs):
self.id = "%s-%s" % (self.group.id, self.group.item_set.count() + 1)
super(Item, self).save(*args, **kwargs)
У меня есть проблема с использованием интерфейса администратора для модели Item, когда я собираюсь сохранить объект, который уже существует, вместо обновлениясуществующая запись новая запись создана.Я пытался принудительно выполнить обновление, когда это необходимо, с помощью этого кода
def save(self, *args, **kwargs):
update = bool(self.id)
self.id = "%s-%s" % (self.group.id, self.group.item_set.count() + 1)
super(Item, self).save(force_update=update, *args, **kwargs)
, но безуспешно.Теперь сохранение после изменения вызывает другую проблему:
DatabaseError at /admin/type/catalog/1_3/
Forced update did not affect any rows.
Я хотел бы знать, что я делаю неправильно, и если есть способ решить проблему.
Спасибо
- РЕДАКТИРОВАТЬ - (нужна дополнительная помощь!)
Вариант использования.
Я хочу получить, что при выборе категории толькоэлементы, принадлежащие к этой категории, отображаются в поле выбора элементов.
По этой причине мне нужно связать каждый элемент с соответствующей категорией с помощью поля id, чтобы категории и элементы в интерфейсе администратора, если они вместена той же странице, будут связаны их идентификатором (и, следовательно, легко обрабатываются с помощью jQuery).Таким образом:
<select id="id_category" name="category">
<option value="1">color</option>
<option value="2">car</option>
</select>
<select id="id_item" name="item">
<option value="1_1">red</option>
<option value="1_2">blue</option>
<option value="2_1">audi</option>
</select>
Если бы я использовал другое поле, кроме id, выпадающий список в admin был бы совершенно не связан в respecet, если их идентификатор, потому что выбор элемента будет:
<option value="1">red</option>
<option value="2">blue</option>
<option value="3">audi</option>
HopeЯ был достаточно ясен!