0

私はUserモデルを持っています:

class User(models.Model):
    SEX = (
        ('M', 'Male'),
        ('F', 'Female'),
    )
    name = models.CharField("Name", max_length=100, blank=False)
    surname = models.CharField("Surname",max_length=150, blank=False)
    is_real = models.BooleanField("Real user", default=False)
    sex = models.CharField("Sex", max_length=1, choices=SEX)
    age = models.IntegerField("Age", blank=False)

すべてUserに電子メールまたはいくつかがあります。

class Email(models.Model):
    address = models.EmailField("Email Address", max_length=250)
    login = models.CharField("Login", max_length=50)
    password = models.CharField("Password", max_length=15)
    date_created = models.DateField("Registered", auto_now_add=True)
    last_login = models.DateTimeField("Last login")
    belongs_to = models.ForeignKey(User, verbose_name="Owner")

ブログもUserあるかもしれません:

class Blog(models.Model):
    address = models.URLField("Blog Url")
    related_email = models.ForeignKey(Email, verbose_name="Registered with")
    belongs_to = models.ForeignKey(User, blank=True)

ブログは通常、電子メールで登録されます。したがって、ブログの所有者を指定していない場合、登録メールの所有者に自動的に設定される必要があります。メソッドをオーバーライドすることでできると思いますが、関係saveに対処する方法がよくわかりません。ForeignKey

4

2 に答える 2

2

このようなことはできませんでしたか?

def save(self, *args, **kwargs):
    if not self.belongs_to:
        self.belongs_to = self.related_email.belongs_to
    return super(Blog, self).save(*args, **kwargs)
于 2013-11-11T14:35:14.620 に答える
-1

まず、に追加null = TrueしますBlog.belongs_to

登録メールの所有者を知っていると仮定すると、次のことができます。

owner = User.objects.get(field = value)
email = Email.objects.get(belongs_to = owner)
Blog.objects.create(address = ..., related_email = email, belongs_to = None)

そして、更新を行う必要がある場合は、行うことができます

blog = Blog.objects.filter(related_email = email).filter(belongs_to__isnull = True)
blog.belongs_to = newUserObject
于 2013-11-11T14:35:46.907 に答える