如何在Django中遍历所有子对象?

时间:2018-07-03 12:28:32

标签: python django django-models django-queryset

如果Django中的许多模型与一个公共模型具有外键关系,那么将如何可能一个接一个地迭代所有子模型。

我了解parent.child_set.all(),但是我想知道是否存在一些有助于使用变量访问子项的东西。

1 个答案:

答案 0 :(得分:0)

很难说出您要做什么。...但是一个简单的getattr可能会帮助

import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import javax.validation.Path;
import javax.validation.constraints.NotNull;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import static java.util.Arrays.asList;

@Provider
public class ValidationExceptionMapper  implements ExceptionMapper<ConstraintViolationException> {


    private  <T> List<T> mergeList(@NotNull List<T> l1 , @NotNull List<T> l2 ) {
        return new ArrayList<T>(l1) {{addAll(l2);}};
    }

    @Override
    public Response toResponse(final ConstraintViolationException exception) {

        Map<Path,List<String>> errors =
                exception.getConstraintViolations()
                .stream()
                .collect(
                        Collectors.toMap(
                            ConstraintViolation::getPropertyPath,
                            cv -> asList(cv.getMessage()),
                            this::mergeList
                        )
                );

        return Response.status(Response.Status.BAD_REQUEST)
                .entity(errors)
                .build();
    }



}