【问题标题】:Question about Django Accessing and saving User Foriegnkey in my model关于 Django 在我的模型中访问和保存用户外键的问题
【发布时间】:2011-03-14 03:43:56
【问题描述】:

我看到similar to this has been asked before,但我想知道是否有更简单的方法来实现这一点。

还关注了this blog post

下面给出了一个示例模型。

class Post (models.Model):
    name = models.CharField(max_length=1000, help_text="required, name of the post")
    description = models.TextField(blank=True)
    created_datetime = models.DateTimeField(auto_now_add=True, editable=False)
    modified_datetime = models.DateTimeField(auto_now=True, editable=False)
    custom_hashed_url = models.CharField(unique=True, max_length=1000, editable=False)

def save(self, *args, **kwargs):
        #How to save User here?
        super(Model, self).save()

难道不能在调用 save() 之前将当前登录的用户发送到 Model 吗?

在视图中:

if request.method == 'POST':

if not errors:

    f = PostForm(request.POST)

    f.save()

【问题讨论】:

  • 我一直在寻找解决这个问题的方法。我的用户已登录,我有外键设置,但它给了我一个错误Cannot assign None: "MyModel.user" does not allow null values.

标签: django django-authentication


【解决方案1】:

鉴于您已使用django-admin 标记此内容,我假设您希望保存正在通过管理界面修改对象的User。 (您不能在模型的 save 方法中真正做到这一点,因为它不一定有权访问 User 对象——例如,如果您从 shell 接口保存对象怎么办?)

要在 Django 的管理员中执行此操作,只需覆盖 ModelAdminsave_model 方法:

class PostAdmin(admin.ModelAdmin):
    def save_model(self, request, obj, form, change):
        obj.user = request.user
        obj.save()

admin.site.register(Post, PostAdmin)

当然,您需要在模型中实际添加一个名为 userForeignKey 才能正常工作...

【讨论】:

  • 我明白了。那么,如果有用户外键,人们如何在他们的模型中保存用户?
  • 您只需将user = models.ForeignKey(User) 添加到您的模型中。那么上面的代码应该可以正常工作了。
  • 我同意,但这是来自管理界面。有没有什么简单的方法可以从我的应用程序中使用 django 的身份验证。
  • 仅当您有权访问请求对象时,在这种情况下,解决方案并不比您发布的原始链接容易得多——一种保存对请求的引用并提取用户的模型表单从保存时开始。
  • 我一直在寻找解决这个问题的方法。我的用户已登录,我有外键设置,但它给了我一个错误Cannot assign None: "MyModel.user" does not allow null values.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-16
  • 1970-01-01
  • 1970-01-01
  • 2023-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多