ich django-FSMs FSMKeyField as documented umgesetzt haben:Django Finite State Machine und FSMKeyField - Sparformen
class ClaimState(models.Model):
id = models.CharField(primary_key=True, max_length=50)
label = models.CharField(max_length=255)
def __str__(self):
return self.label
und haben das ClaimState Modell mit den Staaten über Befestigung bevölkert, und bin mit einem FSMKeyField Zeiger von einem anderen Modell:
class Claim(models.Model):
state = FSMKeyField(ClaimState, default='new')
...
Der Fremdschlüssel funktioniert gut von einem Shell-Django - ich kann tun:
s = ClaimState.objects.first()
Claim.objects.create(state=s)
Kein Problem. Aber wenn ich versuche, eine Forderung aus dem Django Admin zu speichern oder aus meiner eigenen Form, erhalte ich die Fehlermeldung:
claim state instance with id <ClaimState: Rejected> does not exist.
Wenn ich Quelle zu sehen, kann ich sehen, dass die Drop-Down-Werte die PKs sind, so ist es nicht klar, Warum behandelt es das ganze Objekt als wäre es die ID?
Nicht sicher, was diese oder die beste Lösung verursacht?
Dank Matt. Ja, das würde mein nächster Schritt sein (Überschreiben sauber und die Form), aber da der Fehler überraschend war, dachte ich entweder, dass es einen Fehler gab oder ich etwas falsch gemacht hatte. Immer noch nicht sicher, ich verstehe, warum es Zeichenfolgen als Schlüssel erfordert, oder warum es Kennsätze verbirgt (Sie können myinstance.state.label nicht tun). Aber zumindest das bringt Formen zum Laufen. Prost. – shacker