Django 1.5 ModelForm как администратор с изображениями и внешним ключом
У меня есть следующие модели:
class Quiver(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL)
is_default = models.BooleanField(default=False)
type = models.CharField(max_length=1, choices=QUIVER_TYPES)
category = models.CharField(max_length=255, choices=QUIVER_CATEGORIES)
def __unicode__(self):
return u'[%s] %s %s quiver' % (
self.user.username,
self.get_type_display(),
self.get_category_display())
class Image(models.Model):
photo = models.ImageField(upload_to=get_upload_file_path)
is_cover = models.BooleanField(default=False)
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey()
def save(self, *args, **kwargs):
try:
this = Image.objects.get(pk=self.pk)
if this.photo != self.photo:
this.photo.delete(save=False)
except Image.DoesNotExist:
pass
super(Image, self).save(*args, **kwargs)
class Surfboard(models.Model):
quiver = models.ForeignKey(Quiver)
brand = models.CharField(max_length=255)
model = models.CharField(max_length=255)
length = models.CharField(max_length=255)
width = models.CharField(max_length=255, blank=True)
thickness = models.CharField(max_length=255, blank=True)
volume = models.CharField(max_length=255, blank=True)
images = generic.GenericRelation(Image)
def __unicode__(self):
return u'%s %s %s' % (self.length, self.brand, self.model)
def get_cover_image(self):
"Returns the cover image from the images uploaded or a default one"
for image in self.images.all():
if image.is_cover:
return image
return None
Я хотел бы иметь возможность иметь ту же форму, что и у администратора в моем интерфейсе /surfboard/add:
Как новый фанат и пользователь Django, я начал создавать форму с нуля. Не имея возможности сделать то, что я хочу, с включением внешнего ключа "quiver" в качестве раскрывающегося списка, я нашел в документе ModelForm и решил использовать его, так что вот что я получил:
class SurfboardForm(ModelForm):
class Meta:
model = Surfboard
На мой взгляд, это выглядит так, и это уже хорошее начало:
Итак, теперь я хотел иметь возможность добавлять фотографии одновременно, и они связаны с доской для серфинга через общие отношения. Здесь я не нахожу способ сделать реализацию, как в админе, и разочарован. Любые советы, чтобы сделать это?
Спасибо!
1 ответ
То, что вы ищете, называется встроенным набором форм - см. Документы для получения дополнительной информации.
Также удобно, что вы можете быстро визуализировать набор форм с помощью {{ formset.as_p }}
, но вам нужно написать некоторый JavaScript (или использовать JavaScript, который используется в админке Django) для обработки добавления и удаления форм.