2

我有这些(简化的)模型:

class User(models.Model):
    email = models.EmailField(unique=True)

class Invitation(models.Model):
    user = models.ForeignKey(User)
    path = models.CharField(max_length=40, unique=True)

表中的path字段Invitation将包含一个 SHA1 哈希,该哈希将用作 URL 的一部分以访问用户的数据。

我有这个管理员代码:

class InvitationInline(admin.TabularInline):
    model = models.Invitation

class UserAdmin(admin.ModelAdmin):
    inlines = (InvitationInline,)

admin.site.register(models.User, UserAdmin)

这将显示用户并在底部添加邀请列表。

由于我pathInvitation表中的值将由 SHA1 算法从用户的电子邮件和当前时间戳生成,因此我需要:

  1. User默认情况下,管理员中没有显示空的“邀请”行
  2. path从管理员中删除列的编辑字段,并path在单击“添加另一个邀请”按钮时自动生成该字段。

我不知道如何实现这一点,有人可以帮助我吗?

4

1 回答 1

1
  1. 要禁用额外内联邀请表单的显示,只需向您的类添加 extra = 0属性:InvitationInline

    class InvitationInline(admin.TabularInline):
        fields = ('user',)
        extra = 0
        model = models.Invitation
    
  2. 可能,放置路径生成的最佳位置是模型的保存方法Invitation

    import hashlib
    import random
    
    class Invitation(models.Model):
        user = models.ForeignKey(User)
        path = models.CharField(max_length=40, unique=True)
    
        def save(self, *args, **kwargs):
            if self.pk is None:  # This is true only when the model has
                                 # never been saved to database.
                salt = hashlib.sha1(str(random.random())).hexdigest()[:5]
                self.path = hashlib.sha1(salt +\
                    str(self.user.email)).hexdigest()
    
            super(Invitation, self).save(*args, **kwargs)  
    

要从仅向其添加字段属性中path删除: .InvitationInlinefields = ('user',)

于 2013-05-04T11:48:09.300 回答