Django foreign key in SlugRelatedField

170 views
Skip to first unread message

Shekar Tippur

unread,
Aug 17, 2015, 7:51:46 PM8/17/15
to Django users
Hello,

I am trying to create a form that takes input needed for parent child tables. I am unable to create records via post call.
It is a simple parent child relationship. I want to be able to create the parent if it does not exist and create a child right after. I guess I am not able to understand this - http://www.django-rest-framework.org/api-guide/relations/. Appreciate any help.

The Error I see is :
{
    "plumber": [
        "Invalid value."
    ]
}

Here is my views:


class PlumberPipelineList(generics.ListCreateAPIView):
queryset = PlumberPipeline.objects.all()
serializer_class = PlumberPipelineSerializer
def form_valid(self, form):
PlumberPipeline = form.save(commit=False)# dispatch(self, request, *args, **kwargs):
PlumberPipeline.plumber = self.request.plumber
return super(PlumberPipelineList, self).form_valid(form)

Serializer:
-----------

class CreatableSlugRelatedField(serializers.SlugRelatedField):
def to_internal_value(self, data):
try:
print ("In CreatableSlugRelatedField try" + data)
return self.get_queryset().get_or_create(**{self.slug_field: data})
except ObjectDoesNotExist:
print ("In CreatableSlugRelatedField exception")
self.fail('does_not_exist', slug_name=self.slug_field, value=smart_text(data))
except (TypeError, ValueError):
print ("In CreatableSlugRelatedField exception ")
#return self.get_queryset().get_or_create(**{self.slug_field: data})
self.fail('invalid')

class PlumberPipelineSerializer(serializers.ModelSerializer):

plumber = CreatableSlugRelatedField(
many=True,
slug_field='plumber',
queryset=PlumberPipeline.objects.all()
)

#plumber = serializers.SlugRelatedField(slug_field='plumber', many=True, queryset=Plumber.objects.all())
class Meta:
model = PlumberPipeline
fields = ('id','stage_title','plumber')
#fields = ('id', 'stage_title', 'plumber','streamProcessor','bus')

class PlumberSerializer(serializers.ModelSerializer):
#PlumberPipeline = PlumberPipelineSerializer(many=True)
'''
plumberPipelines = CreatableSlugRelatedField(
many=True,
slug_field='plumber',
queryset=PlumberPipeline.objects.all()
)
'''
class Meta:
model = Plumber
fields = ('id','title')

Model
------

class Plumber(models.Model):
plumber = models.CharField(max_length=500, blank=True, default='')
created = models.DateTimeField(auto_now_add=True)

class Meta:
managed = True
ordering = ('created','plumber')

class PlumberPipeline(models.Model):
stage_title = models.CharField(max_length=100, blank=False, default='')
plumber = models.ForeignKey(Plumber, related_name='plumberPipelines')
created = models.DateTimeField(auto_now_add=True)
class Meta:
managed = True
Reply all
Reply to author
Forward
0 new messages