django自关联省市区模型建立

class Area(models.Model):
    '''行政区域'''
    name = models.CharField(max_length=20,verbose_name='名称')
    parent = models.ForeignKey('self',on_delete=models.SET_NULL,related_name='subs',null=True,blank=True,verbose_name='上一级行政区')
    class Meta:
        db_table = 'tb_areas'
        verbose_name = '行政区划'
        verbose_name_plural = '行政区划'

    def __str__(self):
        return self.name
  • 自关联字段的外键指向自身,所以ForeignKey('self')
  • 需要使用related_name指明查询一个行政区划的所有下级行政区划时,使用哪种语法查询,如本模型类中指明通过Area模型类对象.subs查询所有下属行政区划,而不是使用Django默认的Area模型类对象.area_set语法。

新建序列化器:

from rest_framework import serializers

from .models import Area


class AreaSerializer(serializers.ModelSerializer):
    """
    行政区划信息序列化器
    """
    class Meta:
        model = Area
        fields = ('id', 'name')


class SubAreaSerializer(serializers.ModelSerializer):
    """
    子行政区划信息序列化器
    """
    subs = AreaSerializer(many=True, read_only=True)

    class Meta:
        model = Area
        fields = ('id', 'name', 'subs')

视图:

from django.shortcuts import render
from rest_framework.viewsets import ReadOnlyModelViewSet

from .models import Area
from .serializers import AreaSerializer, SubAreaSerializer

# Create your views here.


class AreasViewSet(ReadOnlyModelViewSet):
    """
    行政区划信息
    """
    pagination_class = None  # 区划信息不分页

    def get_queryset(self):
        """
        提供数据集
        """
        if self.action == 'list':
            return Area.objects.filter(parent=None)
        else:
            return Area.objects.all()

    def get_serializer_class(self):
        """
        提供序列化器
        """
        if self.action == 'list':
            return AreaSerializer
        else:
            return SubAreaSerializer

路由:

router = DefaultRouter()
router.register(r'areas', views.AreasViewSet, base_name='areas')

urlpatterns = []

urlpatterns += router.urls

 

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要将Dropzone与Django模型表单关联起来,您可以使用以下步骤进行操作: 1. 创建模型:首先,您需要定义一个模型来存储上传的文件相关信息。例如,您可以在models.py文件中定义一个名为`FileModel`的模型,其中包含一个`FileField`字段用于存储上传的文件。 ```python from django.db import models class FileModel(models.Model): file = models.FileField(upload_to='uploads/') # 其他字段和方法... ``` 在上面的示例中,`upload_to`参数指定了文件上传的目录路径。 2. 创建表单:接下来,您需要创建一个表单类来处理Dropzone上传的文件。您可以使用Django的内置表单功能来定义一个表单类,并将其与文件模型关联起来。 ```python from django import forms from .models import FileModel class FileUploadForm(forms.ModelForm): class Meta: model = FileModel fields = ['file'] ``` 在上面的示例中,我们使用了`ModelForm`来定义一个表单类,并将其与`FileModel`模型关联起来。指定`fields`属性为`['file']`以仅显示文件字段。 3. 编写视图:然后,您需要编写一个视图函数来处理表单的提交和文件的保存。在视图函数中,您可以将上传的文件与文件模型进行关联,并保存到数据库中。 ```python from django.shortcuts import render from .forms import FileUploadForm def upload(request): if request.method == 'POST': form = FileUploadForm(request.POST, request.FILES) if form.is_valid(): file_instance = form.save() # 保存表单数据到数据库 # 其他操作,例如返回成功页面或其他处理 return render(request, 'upload_success.html', {'file_instance': file_instance}) else: form = FileUploadForm() return render(request, 'upload.html', {'form': form}) ``` 在上面的示例中,我们首先实例化`FileUploadForm`并传递`request.POST`和`request.FILES`作为参数。接下来,我们检查表单是否有效,如果有效则调用`form.save()`方法将数据保存到数据库中。然后,您可以执行其他操作,例如返回成功页面,并将文件实例传递给模板以进行显示或其他处理。 4. 创建模板:最后,您需要创建一个模板文件来显示上传表单和上传成功的页面。根据您的需求,您可以创建名为`upload.html`和`upload_success.html`的模板文件,并使用Django模板语法来显示表单和相关信息。 这是一个简单的示例模板代码: upload.html: ```html <form method="post" enctype="multipart/form-data"> {% csrf_token %} {{ form.as_p }} <input type="submit" value="上传"> </form> ``` upload_success.html: ```html <h2>上传成功</h2> <p>已上传文件:{{ file_instance.file.name }}</p> ``` 以上是一个基本的使用Dropzone与Django模型表单关联的示例。您可以根据实际需求进行修改和扩展。 希望这对您有所帮助!如果您有任何疑问,请随时提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值