Mein django Modell sieht wie folgt aus:Django ruhen erfolglosen Anfrage von Client
class ExhibitionSurveyObject(models.Model):
owner = models.ForeignKey(User, verbose_name="Owner of this Survey object", blank=False,)
name = models.CharField(max_length=15, blank=False, verbose_name="Survey Object name", help_text="Please give a single word name for your farm",)
farmer_email = models.EmailField(max_length=254, blank=False, verbose_name="Email of the farmer",)
farmer_name = models.CharField(max_length=25, blank=False, verbose_name="Name of the farmer",)
address = models.TextField(help_text="Please provide the address without the postal code", blank=True,)
postal_code = models.CharField(max_length=5, blank=True, default='12043')
size = models.DecimalField(max_digits=9, decimal_places=6, blank=False,)
path = models.CharField(max_length=1000, blank=False)
def setpath(self, x):
self.path = json.dumps(x)
def getpath(self, x):
return json.loads(self.path)
OBJECT_TYPES = (
('FARM', 'Farm'),
('SOLARPANEL', 'Solarpanel'),
('PLAIN', 'plain')
)
object_type = models.CharField(max_length=100, choices=OBJECT_TYPES)
CYCLES = (
('ONCE', 'once'),
('WEEKLY', 'weekly'),
('MONTHLY', 'monthly')
)
cycle = models.CharField(max_length=100, choices=CYCLES)
#To add user's full name in the admin interface for better readability
def get_owner_full_name(self):
return self.owner.get_full_name()
#Works like a verbose_name but for a method
get_owner_full_name.short_description = 'Owners full name'
Ich habe einen Serializer:
class ExhibitionSurveyObjectSerializer(serializers.ModelSerializer):
class Meta:
model = ExhibitionSurveyObject
fields = '__all__'
def create(self, validated_data):
return ExhibitionSurveyObject.objects.create(**validated_data)
def update(self, instance, validated_data):
instance.name = validated_data.get('name', instance.name)
instance.farmer_email = validated_data.get('farmer_email', instance.farmer_email)
instance.farmer_name = validated_data.get('farmer_name', instance.farmer_name)
instance.address = validated_data.get('address', instance.address)
instance.postal_code = validated_data.get('postal_code', instance.postal_code)
instance.size = validated_data.get('size', instance.size)
instance.path = validated_data.get('path', instance.path)
instance.object_type = validated_data.get('object_type', instance.object_type)
instance.cycle = validated_data.get('cycle', instance.cycle)
instance.save()
return instance
Meine Form:
class ExhibitionSurveyObjectForm(forms.ModelForm):
owner = CustomUserChoiceField(queryset=User.objects.all())
class Meta:
model = ExhibitionSurveyObject
fields = "__all__"
Und meine Ansicht:
class ExhibitionSurveyObjectList(generics.ListCreateAPIView):
queryset = ExhibitionSurveyObject.objects.all()
serializer_class = ExhibitionSurveyObjectSerializer
def perform_create(self, serializer):
serializer.save(owner=self.request.user)
Ich habe ein Ionic2 Frontend und mein Service hat folgende Funktion Instanz des obigen Modells zu speichern:
addObject(
name: string,
farmer_email: string,
farmer_name: string,
size: string,
path: Array<google.maps.LatLngLiteral>,
cycle: string,
object_type: string) {
let obj = new ExhibitionSurveyObjectModel(name, farmer_email, farmer_name, size, path, cycle, object_type);
let body = JSON.stringify(obj);
let headers = new Headers({ 'Content-Type': 'application/json; charset=utf-8', 'Authorization': 'Token ' + localStorage.getItem('auth_token') });
let options = new RequestOptions({ headers: headers });
console.log(body);
return this.http.post(this._exhibitionSurveyObjectURL, body, options)
.map(this.extractData)
.catch(this.handleError)
}
ich auch ein Modell, auf Kundenseite:
export class ExhibitionSurveyObjectModel {
constructor(
public name: string,
public farmer_email: string,
public farmer_name: string,
public size: string,
public path: Array<google.maps.LatLngLiteral>,
public cycle: string,
public object_type: string,
public owner: string
){}
}
Wie ich sehe, wird das Token an das Backend gesendet, aber ich bekomme eine Antwort, die sagt {"owner":["This field is required."]}
Senden Token nicht genug? Wenn ich 'Eigentümer' auch von meiner Service-Anfrage übergeben muss, was sein Wert sein sollte (aber Token sollte genug sein, nehme ich an)?
Oder fehlt mir etwas auf Backend-Seite?
Perfekt! Das hat funktioniert! – Nitish