У меня есть следующие моделисоздание модели с foreingn ключей с использованием базы Джанго Rest
class Parent(models.Model):
address = models.CharField(max_length=30, blank=True, null=True)
address_no = models.CharField(max_length=4, blank=True, null=True, verbose_name="No")
phone = models.CharField(max_length=15, blank=True, null=True, verbose_name="Phone Number")
user = models.OneToOneField(User)
class Meta:
verbose_name_plural = "Parents"
verbose_name = "Parent"
def __unicode__(self):
return "%s %s" % (self.user.first_name, self.user.last_name)
class Child(models.Model):
age = models.IntegerField(blank=True, null=True)
grade = models.IntegerField(blank=True, null=True)
user = models.OneToOneField(User)
parent = models.ForeignKey(Parent, related_name="children")
class Meta:
verbose_name = "Child"
verbose_name_plural = "Children"
def __unicode__(self):
return "%s %s" % (self.user.first_name, self.user.last_name)
Так что разные типы пользователей в моей системе (родители и дети). Я реализую их, используя отношение к модели User, потому что у родителей есть разные поля от Children. (Дополнительно: есть лучший способ сделать это?)
Я также реализовал Сериализую для этих моделей в моем отдыхе апи
serializers.py
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ('id', 'url', 'username', 'email', 'groups')
class GroupSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Group
fields = ('url', 'name')
class ParentSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Parent
class ChildSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Child
и использовал viewsets для генерации просмотров за апи и функциональность
views.py
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
filter_fields = ('username', 'email', 'first_name', 'last_name')
class GroupViewSet(viewsets.ModelViewSet):
queryset = Group.objects.all()
serializer_class = GroupSerializer
class ParentViewSet(viewsets.ModelViewSet):
queryset = Parent.objects.all()
serializer_class = ParentSerializer
class ChildViewSet(viewsets.ModelViewSet):
queryset = Child.objects.all()
serializer_class = ChildSerializer
и настроить URLs
urls.py
router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)
router.register(r'groups', views.GroupViewSet)
router.register(r'parents', views.ParentViewSet)
router.register(r'children', views.ChildViewSet)
urlpatterns = patterns('',
# Examples:
url(r'^api/', include(router.urls)),
url(r'api-auth/', include('rest_framework.urls', namespace='rest_framework')),
)
Так пост в/API/родители создать новый родительский object.But это обыкновение создавать объект пользователя, который необходим для модели Parent. Один из способов состоит в том, чтобы сделать 2 api вызывает одну из них/api/users/a post и создать нового пользователя, а затем получить идентификатор нового пользователя и использовать его для публикации в/api/parents. Я бы хотел этого избежать. Есть ли способ сделать это, создав нового родителя из api. Как я могу также вернуть first_name и last_name пользователя в виде списка родителей (api/parents /). Теперь он возвращает URL-адреса соответствующего пользователя, но ни один из его полей
У пользователей Imho должны быть контакты и сведения об окончании. Я думаю, не у каждого ребенка есть родитель. : S Отношения должны поддерживаться в другой таблице imho. Но текущего решения может быть достаточно ... – inf3rno