1

Personnelモデルのプロファイルモデルとして使用しているというモデルがありUserます。私のサイトのモデレーターは自分のアカウントを作成できますが、すべてのプロファイルフィールドに入力する必要があります。これが私のモデルです

class Personnel(models.Model):
    """
    Model for storing the personnel information
    """
    user = models.OneToOneField(
        User
    )
    phone = models.CharField(
        null=False, max_length=50, verbose_name="Phone"
    )
    address = models.CharField(
        null=True, max_length=500, verbose_name="Address"
    )

以下を実装する必要があります。

createモデル上のメソッド。Personnel誰かがメソッドPersonnel.objects.create(username, email, phone, address)を呼び出すと、モデルに新しいユーザーが作成されUser、プロファイルフィールドもモデルに保存されますPersonnel。リクエストを処理するには、このフォームが必要ですが、このフォームは、モデルのフィールドとPersonnelモデルの両方を検証する必要がありUserます。

deleteモデル上のメソッド。Personnel誰かがメソッドPersonnel.objects.delete(username)を呼び出すと、モデルからプロファイルが削除され、Personnelモデルからユーザーが削除されますUser。このためのフォームは必要ないと思います。

フォームビットとマネージャービットの作り方を教えてください。これが私がこれまでに持っているものです:

形:

マネジャー:

from django.db import models
from django.contrib.auth.models import User

class Personnel(models.Manager):
    """
    This is the manager for the Personnel model. It contains the logic for
    creating a new personnel which also creates a new User.
    """
    def create(self, username, email, phone, address):
        """
        Creates a new personnel
        """
        pass

    def delete(self, username):
        """
        Deletes a personnel
        """
        super(Personnel, self).delete()

どうもありがとう。

4

2 に答える 2

1

この作業にメソッドを追加して実行Personnel.save()する方がおそらく簡単です。Personnel.delete()

https://docs.djangoproject.com/en/1.3/topics/db/models/#overriding-model-methods

Personnel.save()はDjangoによって呼び出され、欠落しているユーザーとプロファイルを作成する可能性があります。

アプリケーションによっては、「削除のオーバーライド」サイドバーが関連しない場合があります。一括削除はまれであり、一括削除後のクリーンアップを簡単に実行できます。または、一括削除ではなく個別削除を行います。

于 2011-07-11T20:45:17.750 に答える
1
class PersonnelManager(models.Manager):
    def create(self, username, email, phone, address, **kwargs):
        user = User.objects.get_or_create(username=username, email=email)
        return super(PersonnelManager, self).create(user=user, phone=phone, address=address, **kwargs)

class Personnel(models.Model):
    ...
    objects = PersonnelManager()

削除は、カスケードを介してそれ自体を処理する必要があります。

于 2011-07-11T22:05:37.180 に答える