Google App Engine 的基本唯一 ModelForm 字段

发布于 2024-08-06 03:33:37 字数 547 浏览 4 评论 0原文

我不关心并发问题。

构建独特的表单字段相对容易:

from django import forms

class UniqueUserEmailField(forms.CharField):
    def clean(self, value):
      self.check_uniqueness(super(UniqueUserEmailField, self).clean(value))

    def check_uniqueness(self, value):
        same_user = users.User.all().filter('email', value).get()
        if same_user:
          raise forms.ValidationError('%s already_registered' % value)

因此可以即时添加用户。编辑现有用户很棘手。该字段不允许保存具有其他用户电子邮件的用户。同时,它不允许保存具有相同电子邮件地址的用户。您使用什么代码将具有唯一性检查的字段放入 ModelForm 中?

I do not care about concurrency issues.

It is relatively easy to build unique form field:

from django import forms

class UniqueUserEmailField(forms.CharField):
    def clean(self, value):
      self.check_uniqueness(super(UniqueUserEmailField, self).clean(value))

    def check_uniqueness(self, value):
        same_user = users.User.all().filter('email', value).get()
        if same_user:
          raise forms.ValidationError('%s already_registered' % value)

so one could add users on-the-fly. Editing existing user is tricky. This field would not allow to save user having other user email. At the same time it would not allow to save a user with the same email. What code do you use to put a field with uniqueness check into ModelForm?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

安穩 2024-08-13 03:33:37

快速而肮脏的方法是:

  1. make check_uniqueness classmethod
  2. 在 ModelForm 中使用自定义字段检查,如下所示:

    类用户(forms.ModelForm):    
        电子邮件 = forms.EmailField()    
    def clean_email(自我):
        数据 = self.cleaned_data['电子邮件']
        原始 = self.instance.email
        如果原始==数据:
            返回数据
        UniqueUserEmailField.check_uniqueness(数据)
        返回数据
    

更好的选择?

quick and dirty way would be:

  1. make check_uniqueness classmethod
  2. use custom field check in ModelForm, like this:

    class User(forms.ModelForm):    
        email = forms.EmailField()    
    def clean_email(self):
        data = self.cleaned_data['email']
        original = self.instance.email
        if original == data:
            return data
        UniqueUserEmailField.check_uniqueness(data)
        return data
    

better options?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文