在Django模型中的一个变量中存储几个信息

时间:2018-03-21 19:15:58

标签: python django variables django-models

    class Cities(models.Model):
    city_main_image = models.FileField()
    city_name = models.CharField(max_length=200)
    city_info = models.CharField(max_length=1000)
    city_images = models.FileField()

在我的models.py中我有Cities类,我想上传这个类变量的几个图像,显然是city_images变量我该怎么做?有没有办法做到这一点?

3 个答案:

答案 0 :(得分:1)

在回答您的问题之前,很少有关于您的代码的说明。

1)坚持使用单一的模型名称,而不是城市 2)不要在每个字段中重复模型名称,因此你得到“main_image”,  “名称”,“信息”,“图像”。
3)将ImageField用于图像而不是FileField 4)不需要为main_image和图像提供2个字段。您可以添加额外的字段以使图像成为主图像。

现在,要回答您的问题,您需要阅读SQL数据库中的关系。 要使用django的ORM使用模型之间的关系,请查看https://docs.djangoproject.com/en/2.0/ref/models/fields/#django.db.models.ForeignKey

您有两个选项:ForeignKeyManyToManyField。坚持ForeignKey,因为你不需要多对多的关系。

所以你会得到以下内容:

class City(models.Model):
    ...

class CityImage(models.Model):
    image = models.ImageField(...)
    city = models.ForeignKey(City) # you might need to add on_delete parameter depending on your django version.

class CityImage(models.Model):
    image = models.ImageField(...)

class City(models.Model):
    ...
    images = models.ManyToManyField(CityImage)

答案 1 :(得分:1)

  onGridReady(params) {
  params.api.sizeColumnsToFit();

  this.gridApi = params.api;


  this.gridColumnApi = params.columnApi;

  let URL = 'http://localhost:3000/employees';
  let myHeaders = new Headers();
  myHeaders.set('Content-Type', 'application/json');
  let myParams = new URLSearchParams()
  myParams.set('sort', params.sortModel);
  myParams.set('filter', params.filterModel);
  let options = new RequestOptions({ headers: myHeaders, params: myParams });
  this.http.get(URL, options).subscribe(data => {
    console.log(data);

    var newData = data.json();

    newData.forEach(function (data, index) {
      newData.id = "R" + (index + 1);
    });
    //params.api.setRowData(newData);
    var dataSource = {
      rowCount: null,
      getRows: function (params) {
        console.log("asking for " + params.startRow + " to " + params.endRow);
        setTimeout(function () {

          console.log("sortModel: ", JSON.stringify(params.sortModel));
           console.log("filterModel: ", JSON.stringify(params.filterModel));

          console.log("--------------------------");

          var dataAfterSortingAndFiltering = sortAndFilter(newData, params.sortModel, params.filterModel);
          var rowsThisPage = dataAfterSortingAndFiltering.slice(params.startRow, params.endRow);
          var lastRow = -1;
          if (dataAfterSortingAndFiltering.length <= params.endRow) {
            lastRow = dataAfterSortingAndFiltering.length;
          }
          params.successCallback(rowsThisPage, lastRow);
        }, 500);
      }
    };
    params.api.setDatasource(dataSource);

  });



    /*  this.http
    .get('assets/db.json')
    .subscribe(data => {

      console.log(data);

      var newData = data.json();

      newData.forEach(function (data, index) {
        newData.id = "R" + (index + 1);
      });
      //params.api.setRowData(newData);
      var dataSource = {
        rowCount: null,
        getRows: function (params) {
          console.log("asking for " + params.startRow + " to " + params.endRow);
          setTimeout(function () {

            //var str=JSON.stringify(params.sortModel);
           //console.log("sortModel: ", JSON.stringify(params.sortModel));
            //var try2=params.sortModel;
            //var try3 = try2[0];
            //console.log("try3", try3);
            //console.log("try3.colId",try3.sort);

            //console.log("filterModel: ", JSON.stringify(params.filterModel));
            //console.log(params.filterModel);
            //console.log("--------------------------");

            var dataAfterSortingAndFiltering = sortAndFilter(newData, params.sortModel, params.filterModel);
            var rowsThisPage = dataAfterSortingAndFiltering.slice(params.startRow, params.endRow);
            var lastRow = -1;
            if (dataAfterSortingAndFiltering.length <= params.endRow) {
              lastRow = dataAfterSortingAndFiltering.length;
            }
            params.successCallback(rowsThisPage, lastRow);
          }, 500);
        }
      };
      params.api.setDatasource(dataSource);
    });

*/
  }


}

现在,您所在的城市中的每个城市都可以在另一个名为CityImages的模型中拥有一个或多个图像。如果我们以表格的形式进行讨论,那么表格中的行的主键将与表city_images中的一行或多行相关联。我强烈建议您阅读django的官方入门教程。另外,我个人认为this tutorial对初学者非常有帮助。以防它有帮助。

答案 2 :(得分:0)

您可以这样做的一种方法是制作一个CityImage模型,该模型允许您为ForeignKey模型制作City,其中related_name=images为反向查找。

class City(models.Model):
    name = models.CharField(max_length=200)
    info = models.CharField(max_length=1000)

    @property
    def main_image(self):
        try:
            return self.images.get(primary=True)
        except CityImage.DoesNotExist:
            pass
        except CityImage.MultipleObjectsReturned:
            # Handle this case, the application should ensure only one is set to `True` at a time...

class CityImage(models.Model):
    city = models.ForeignKey(City, related_name='images')
    primary = models.BooleanField(default=False)
    image = models.FileField()