所以,我有一个模型拼图和模型片。作为外国人对拼图的关键。在管理员上,在拼图表单上添加一个新元素,我有一个stackInLine for pieces。但是如果我从作品中输入所有数据,我只能添加更多。有没有办法通过选择已经存储在DB上的Piece值的下拉列表来为拼图添加新的Pieces?我谷歌永远都没找到......谢谢。所以我拥有的是:
class Puzzle(models.Model):
name = models.CharField(max_length=200)
class Piece(models.Model):
name = models.CharField(max_length=200)
puzzle = models.ForeignKey(Puzzle, null=True)
在django后端,当我编辑拼图时,我想从存储在数据库中的所有Piece模型的下拉菜单中选择"分配"他们对我目前的谜题进行了编辑。这可能吗?我现在正在使用:
class PieceInline(admin.StackedInline):
model = Piece
extra = 1
class PuzzleAdmin(admin.ModelAdmin):
model = Piece
inlines = (PieceInLine, )
所以我在拼图形式上有一个堆叠的线条,但我只能创建新的......
答案 0 :(得分:1)
如果您创建新模型,请说:
from django.dispatch import receiver
class PieceSelector(models.Model):
piece = models.ForeignKey(Piece)
def __unicode__(self):
return piece.some_field
@receiver(post_save, sender=Piece)
def piece_post_save_signal_receiver(sender, **kwargs):
if kwargs['created']:
PieceSelector.objects.create(piece=kwargs['instance'])
现在,当您创建Piece模型对象时,您也应该创建PieceSelector对象。您可以使用Piece模型的post_save信号来完成它,它将在下拉列表中提供所有部分。
在admin.py中,使用PieceSelector作为Puzzle模型的StackedInline。