Django(phpまたは.Net過去から)を把握しようとすると少し挑戦します。djangoリンクされたモデルにアクセスするためのuuidプライマリキーを使用
次のモデル作成している場合:
class Member(models.Model):
id = models.UUIDField(default=uuid.uuid4, primary_key=True, editable=False)
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
def __str__(self):
return self.last_name + ", " + self.first_name
class Organisation(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = models.CharField(max_length=140)
def __str__(self):
return self.name
class Membership(models.Model):
id = models.UUIDField(default=uuid.uuid4, primary_key=True, editable=False)
member_id = models.ForeignKey('Member', on_delete=models.DO_NOTHING)
organisation_id = models.ForeignKey('Organisation', on_delete=models.DO_NOTHING)
membership_no = models.CharField(max_length=20)
class Meta:
unique_together = (("organisation_id", "member_id"),
("organisation_id", "membership_no"))
def __str__(self):
mbr = Member.objects.get(pk=self.member_id)
org = Organisation.objects.get(pk=self.organisation_id)
return str(org) + ": " + str(mbr)
を私は編集/管理者のメンバーシップモデルを表示しようとすると問題が発生します。私はエラーを受け取ります: /admin/membership/membershipのTypeError 例外値: 'Anderson、Roy'は有効なUUIDではありません。
私はDjangoバージョン1.10.3を使用しています。
文字列 'Anderson、Roy'は、メンバーモデルのデータベースエントリの1つで、メンバーモデルのstr関数によって返された値を返すように見えます。しかし、私はなぜそれがUUIDとして使用しようとしているのか分かりません。メンバシップモデルの戻り値(str関数)を作成するために、メンバモデルと組織モデルからユーザー文字列値を取得しようとしています。その機能に問題があるようです。 はこの
mbr = Member.objects.get(pk=self.member_id)
は、与えられたUUIDのためのメンバーを取得するための正しい方法は何ですか?
大変助かりました。おかげ
self.idを返すように__str__を変更すると、メンバーシップの管理者は__str__が文字列を返さないことを文句を言います。私がstr(self.id)を返すように変更すると、返された値がUUIDではないと告げる。私は勝てないと思われる!私が見つけたすべてのドキュメントでは、__str__は必ずしもIDではないオブジェクトを説明するユーザーフレンドリーな文字列を返さなければならないと言います。迅速な返信をありがとう。 – user917051
UUIDまたはIDが必要な場合は、_ _str_ _メソッドを完全に使用しないでください。代わりに_ _unicode_ _メソッドを使用しています。 –
それはそれでした。余分な.idを追加すると問題が解決しました。本当に感謝しています。非常に感謝しています。 – user917051