lxy
V2EX  ›  Django

怎么在表单中隐藏主键?

  •  
  •   lxy · Feb 28, 2017 · 4034 views
    This topic created in 3536 days ago, the information mentioned may be changed or developed.
    class MusicInfo(models.Model):
        music_id = models.CharField(primary_key=True, default=hash_func)
        music_name =  # 略...
    

    比如上面的 Model,music_id 是随机生成的哈希,在后台管理中会显示 music_id,我想在表单中隐藏这个字段,最好连 input hidden 标签也没有。

    Supplement 1  ·  Mar 1, 2017

    比如在新增的时候隐藏这行 音乐ID:

    Supplement 2  ·  Mar 1, 2017

    解决了……

    在 forms.py 创建一个 MusicInfoForm,其 Meta class 的成员 exclude 元组含 music_id,将 MusicInfoForm 关联到 admin.py 的 MusicInfoAdmin 的 form 成员。

    这样,新增资源的时候,ID不可更改,但是浏览资源信息的时候可以看到ID,编辑资源也不可更改ID。

    5 replies  •  2017-03-01 10:46:59 +08:00
    cszeus
    cszeus
    Mar 1, 2017
    1
    为什么要手动设置一个 id 呢,用自增的不好么
    crystom
    crystom
    Mar 1, 2017
    2
    lxy
    lxy
    OP
    Mar 1, 2017
    3
    @cszeus 防爬虫枚举
    013231
    013231
    Mar 1, 2017❤️1
    4
    把该 Field 的 editable 设为 False 不就可以了吗?

    https://docs.djangoproject.com/en/1.10/ref/models/fields/#editable

    Field.editable

    If False, the field will not be displayed in the admin or any other ModelForm. They are also skipped during model validation. Default is True.
    JerryZhang
    JerryZhang
    Mar 1, 2017
    5
    1 、在 admin fields 中去掉 music_id
    2 、在 admin list_display 加上 music_id
    3 、重写 save 函数,在保存的时候如果 music_id 为空,则自动生成一个
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4369 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 03:56 · PVG 11:56 · LAX 19:56 · JFK 22:56
    ♥ Do have faith in what you're doing.